问题如题描述。
目的:使用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);