NPOI ExcelToHtmlConverter 将excel转换成html后打印 格式有问题

问题如题描述。

目的:使用NPOI将excel转换成html,让客户可以直接打印。
问题:生成的html,或者打印的结果,部分边框不显示,文本不会换行。

代码:

 public byte[] XLSConvertToHtml(HSSFWorkbook workbook, string outFile)
        {
            //the excel file to convert
            //string fileName = "E:/Workspace/34 NOPI Excel操作/农村土地承包经营权登记簿.xls";
            //fileName = Path.Combine(Environment.CurrentDirectory, fileName);
            //workbook = ExcelToHtmlUtils.LoadXls(fileName);

            ExcelToHtmlConverter excelToHtmlConverter = new ExcelToHtmlConverter();

            //set output parameter
            excelToHtmlConverter.OutputColumnHeaders = false;
            excelToHtmlConverter.OutputHiddenColumns = false;
            excelToHtmlConverter.OutputHiddenRows = false;
            excelToHtmlConverter.OutputLeadingSpacesAsNonBreaking = false;
            excelToHtmlConverter.OutputRowNumbers = false;
            excelToHtmlConverter.UseDivsToSpan = false;

            //process the excel file
            excelToHtmlConverter.ProcessWorkbook(workbook);

            //output the html file
            excelToHtmlConverter.Document.Save(outFile);

            var bytes = this.FileToByte(outFile);
            //File.Delete(outFile);
            return bytes;
        }

图片说明

如图片所示,右侧的边框没有了,
在线等,先谢谢了。

如果可以其他打印的方案,也可以,谢谢。

想换其他的方式,竟然也没有头绪,我是web项目。

使用POI读取excel 然后使用freemarker将你想要的样子输出出来就OK了 很简单

楼主,边框没显示万的问题解决没有。求解答。谢谢

同问有没有解决?遇到同样的问题,或者最后换了别的方法区去实现呢?

public class StringUtils {

/**
 * 1截取出     poi工具转换成的html字符串中间的样式style代码
 * @param excel2htmlStr
 * @param strStart
 * @param strEnd
 * @return
 */
public static String getStyle(String excel2htmlStr, String strStart, String strEnd) {

    if (StringKit.isBlank(excel2htmlStr)) return "";

    /* 找出指定的2个字符在 该字符串里面的 位置 */
    int strStartIndex = excel2htmlStr.indexOf(strStart);
    int strEndIndex = excel2htmlStr.indexOf(strEnd);

    /* index 为负数 即表示该字符串中 没有该字符 */
    if (strStartIndex < 0)  return "";
    if (strEndIndex < 0)  return "";
    /* 开始截取 */
    String style = excel2htmlStr.substring(strStartIndex, strEndIndex).substring(strStart.length());
    return style;
}

/**
 * 处理样式style代码,增加全边框处理
 * @param style
 * @return
 */
public static String handleStyle(String style){

    if (StringKit.isBlank(style)) return "";

    //样式代码      .b1{white-space-collapsing:preserve;}.t1{border-collapse:collapse;border-spacing:0;}.r1{height:13.5pt;}.c1{white-space:pre-wrap;text-align:center;border-top:thin solid black;border-bottom:thin solid black;border-left:thin solid black;font-size:11pt;}
    StringBuilder newStyle= new StringBuilder();
    Map resultMap = new HashMap<String,String>();

    //将样式代码分割成成如下数组:[.b1{white-space-collapsing:preserve, .t1{border-collapse:collapse;border-spacing:1.2]
    String[] split = style.split(";}");

    for (String splitStr : split) {
        if(!"".equals(splitStr.trim())){
            //单个splitStr的格式如下:.t1{border-collapse:collapse;border-spacing:1.2;}
            splitStr= splitStr+";}";
            String key = splitStr.substring(0,splitStr.indexOf("{"));//key 的值--->.t1
            String value = getStyle(splitStr,"{",";}");//value 的值---> border-collapse:collapse;border-spacing:1.2

            //如果这个样式中包含表格边框,不管齐不齐,先清除边框,再加齐
            if (value.contains("border-top:")||value.contains("border-right:")||value.contains("border-bottom:")||value.contains("border-left:")) {
                //先把以前的去掉边框格式去掉
                value = value.replaceAll("border-top:(.*?);", "");
                value = value.replaceAll("border-bottom:(.*?);", "");
                value = value.replaceAll("border-left:(.*?);", "");
                value = value.replaceAll("border-right:(.*?);", "");
                //再加上固定的边框
                value += ";border-top:thin solid black;border-right:thin solid black;border-bottom:thin solid black;border-left:thin solid black";
            }
            resultMap.put(key, value);
        }
    }

    Set<Entry> entrySet = resultMap.entrySet();
    for (Entry entry : entrySet) {
        newStyle.append(entry.getKey()).append("{").append(entry.getValue()).append(";}");
    }

    return newStyle.toString();
}

}

    //最后
String str1 = StringUtils.getStyle(excelWriteToHtml,"<style type=\"text/css\">","</style");//.b1{white-space-collapsing:preserve;}.t1{border-collapse:collapse;border-spacing:0;}.r1{height:13.5pt;}.c1{white-space:pre-wrap;text-align:center;border-top:thin solid black;border-bottom:thin solid black;border-left:thin solid black;font-size:11pt;}
    String str2 = StringUtils.handleStyle(str1);
    excelWriteToHtml = excelWriteToHtml.replace(str1, str2);