Demo结构和引用的Jar包

源代码(TestDemo.java)

POI中将Excel转换为HTML方法仅能转换HSSFWorkBook类型(即03版xls),故可以先将读取的xlsx文件转换成xls文件再调用该方法统一处理

package test;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList; import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult; import org.apache.poi.hssf.converter.ExcelToHtmlConverter;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.w3c.dom.Document; public class TestDemo { final static String path = "D:\\EclipseWorkspace\\ExcelToHtmlDemo\\ExcelToHtml\\";
final static String file = "TestExcel.xlsx";
private static final String EXCEL_XLS = "xls";
private static final String EXCEL_XLSX = "xlsx"; public static void main(String[] args)
{
try{
InputStream input = new FileInputStream(path +"/"+ file);
HSSFWorkbook excelBook = new HSSFWorkbook();
//判断Excel文件将07+版本转换为03版本
if(file.endsWith(EXCEL_XLS)){ //Excel 2003
excelBook = new HSSFWorkbook(input);
}
else if(file.endsWith(EXCEL_XLSX)){ // Excel 2007/2010
Transform xls = new Transform();
XSSFWorkbook workbookOld = new XSSFWorkbook(input);
   xls.transformXSSF(workbookOld, excelBook);
} ExcelToHtmlConverter excelToHtmlConverter = new ExcelToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
//去掉Excel头行
excelToHtmlConverter.setOutputColumnHeaders(false);
//去掉Excel行号
excelToHtmlConverter.setOutputRowNumbers(false); excelToHtmlConverter.processWorkbook(excelBook); Document htmlDocument = excelToHtmlConverter.getDocument(); ByteArrayOutputStream outStream = new ByteArrayOutputStream();
DOMSource domSource = new DOMSource(htmlDocument);
StreamResult streamResult = new StreamResult(outStream);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer serializer = tf.newTransformer(); serializer.setOutputProperty(OutputKeys.ENCODING, "gb2312");
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
serializer.setOutputProperty(OutputKeys.METHOD, "html"); serializer.transform(domSource, streamResult);
outStream.close(); //Excel转换成Html
String content = new String(outStream.toByteArray());
System.out.println(content);
}
catch(Exception e) {
e.printStackTrace();
}
}
}

 

源代码(Transform.java) 将xlsx文件转换成xls文件。(可以处理合并单元格,边框等格式问题!!!)

package test;

import java.util.HashMap;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DataFormat;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class Transform { private int lastColumn = 0;
private HashMap<Integer, HSSFCellStyle> styleMap = new HashMap(); public void transformXSSF(XSSFWorkbook workbookOld, HSSFWorkbook workbookNew) {
HSSFSheet sheetNew;
XSSFSheet sheetOld; workbookNew.setMissingCellPolicy(workbookOld.getMissingCellPolicy()); for (int i = 0; i < workbookOld.getNumberOfSheets(); i++) {
sheetOld = workbookOld.getSheetAt(i);
sheetNew = workbookNew.getSheet(sheetOld.getSheetName());
sheetNew = workbookNew.createSheet(sheetOld.getSheetName());
this.transform(workbookOld, workbookNew, sheetOld, sheetNew);
}
} private void transform(XSSFWorkbook workbookOld, HSSFWorkbook workbookNew,
XSSFSheet sheetOld, HSSFSheet sheetNew) { sheetNew.setDisplayFormulas(sheetOld.isDisplayFormulas());
sheetNew.setDisplayGridlines(sheetOld.isDisplayGridlines());
sheetNew.setDisplayGuts(sheetOld.getDisplayGuts());
sheetNew.setDisplayRowColHeadings(sheetOld.isDisplayRowColHeadings());
sheetNew.setDisplayZeros(sheetOld.isDisplayZeros());
sheetNew.setFitToPage(sheetOld.getFitToPage()); sheetNew.setHorizontallyCenter(sheetOld.getHorizontallyCenter());
sheetNew.setMargin(Sheet.BottomMargin,
sheetOld.getMargin(Sheet.BottomMargin));
sheetNew.setMargin(Sheet.FooterMargin,
sheetOld.getMargin(Sheet.FooterMargin));
sheetNew.setMargin(Sheet.HeaderMargin,
sheetOld.getMargin(Sheet.HeaderMargin));
sheetNew.setMargin(Sheet.LeftMargin,
sheetOld.getMargin(Sheet.LeftMargin));
sheetNew.setMargin(Sheet.RightMargin,
sheetOld.getMargin(Sheet.RightMargin));
sheetNew.setMargin(Sheet.TopMargin, sheetOld.getMargin(Sheet.TopMargin));
sheetNew.setPrintGridlines(sheetNew.isPrintGridlines());
sheetNew.setRightToLeft(sheetNew.isRightToLeft());
sheetNew.setRowSumsBelow(sheetNew.getRowSumsBelow());
sheetNew.setRowSumsRight(sheetNew.getRowSumsRight());
sheetNew.setVerticallyCenter(sheetOld.getVerticallyCenter()); HSSFRow rowNew;
for (Row row : sheetOld) {
rowNew = sheetNew.createRow(row.getRowNum());
if (rowNew != null)
this.transform(workbookOld, workbookNew, (XSSFRow) row, rowNew);
} for (int i = 0; i < this.lastColumn; i++) {
sheetNew.setColumnWidth(i, sheetOld.getColumnWidth(i));
sheetNew.setColumnHidden(i, sheetOld.isColumnHidden(i));
} for (int i = 0; i < sheetOld.getNumMergedRegions(); i++) {
CellRangeAddress merged = sheetOld.getMergedRegion(i);
sheetNew.addMergedRegion(merged);
}
} private void transform(XSSFWorkbook workbookOld, HSSFWorkbook workbookNew,
XSSFRow rowOld, HSSFRow rowNew) {
HSSFCell cellNew;
rowNew.setHeight(rowOld.getHeight()); for (Cell cell : rowOld) {
cellNew = rowNew.createCell(cell.getColumnIndex(),
cell.getCellType());
if (cellNew != null)
this.transform(workbookOld, workbookNew, (XSSFCell) cell,
cellNew);
}
this.lastColumn = Math.max(this.lastColumn, rowOld.getLastCellNum());
} private void transform(XSSFWorkbook workbookOld, HSSFWorkbook workbookNew,
XSSFCell cellOld, HSSFCell cellNew) {
cellNew.setCellComment(cellOld.getCellComment()); Integer hash = cellOld.getCellStyle().hashCode();
if (this.styleMap != null && !this.styleMap.containsKey(hash)) {
this.transform(workbookOld, workbookNew, hash,
cellOld.getCellStyle(),
(HSSFCellStyle) workbookNew.createCellStyle());
}
cellNew.setCellStyle(this.styleMap.get(hash)); switch (cellOld.getCellType()) {
case Cell.CELL_TYPE_BLANK:
break;
case Cell.CELL_TYPE_BOOLEAN:
cellNew.setCellValue(cellOld.getBooleanCellValue());
break;
case Cell.CELL_TYPE_ERROR:
cellNew.setCellValue(cellOld.getErrorCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
cellNew.setCellValue(cellOld.getCellFormula());
break;
case Cell.CELL_TYPE_NUMERIC:
cellNew.setCellValue(cellOld.getNumericCellValue());
break;
case Cell.CELL_TYPE_STRING:
cellNew.setCellValue(cellOld.getStringCellValue());
break;
default:
System.out.println("transform: Unbekannter Zellentyp "
+ cellOld.getCellType());
}
} private void transform(XSSFWorkbook workbookOld, HSSFWorkbook workbookNew,
Integer hash, XSSFCellStyle styleOld, HSSFCellStyle styleNew) {
styleNew.setAlignment(styleOld.getAlignment());
styleNew.setBorderBottom(styleOld.getBorderBottom());
styleNew.setBorderLeft(styleOld.getBorderLeft());
styleNew.setBorderRight(styleOld.getBorderRight());
styleNew.setBorderTop(styleOld.getBorderTop());
styleNew.setDataFormat(this.transform(workbookOld, workbookNew,
styleOld.getDataFormat()));
styleNew.setFillBackgroundColor(styleOld.getFillBackgroundColor());
styleNew.setFillForegroundColor(styleOld.getFillForegroundColor());
styleNew.setFillPattern(styleOld.getFillPattern());
styleNew.setFont(this.transform(workbookNew,
(XSSFFont) styleOld.getFont()));
styleNew.setHidden(styleOld.getHidden());
styleNew.setIndention(styleOld.getIndention());
styleNew.setLocked(styleOld.getLocked());
styleNew.setVerticalAlignment(styleOld.getVerticalAlignment());
styleNew.setWrapText(styleOld.getWrapText());
this.styleMap.put(hash, styleNew);
} private short transform(XSSFWorkbook workbookOld, HSSFWorkbook workbookNew,
short index) {
DataFormat formatOld = workbookOld.createDataFormat();
DataFormat formatNew = workbookNew.createDataFormat();
return formatNew.getFormat(formatOld.getFormat(index));
} private HSSFFont transform(HSSFWorkbook workbookNew, XSSFFont fontOld) {
HSSFFont fontNew = workbookNew.createFont();
fontNew.setBoldweight(fontOld.getBoldweight());
fontNew.setCharSet(fontOld.getCharSet());
fontNew.setColor(fontOld.getColor());
fontNew.setFontName(fontOld.getFontName());
fontNew.setFontHeight(fontOld.getFontHeight());
fontNew.setItalic(fontOld.getItalic());
fontNew.setStrikeout(fontOld.getStrikeout());
fontNew.setTypeOffset(fontOld.getTypeOffset());
fontNew.setUnderline(fontOld.getUnderline());
return fontNew;
}
}

(POI)Excel格式转Html格式的更多相关文章

  1. POI处理Excel中各种日期格式问题

    前不久写过一篇随笔<EXCEL解析之终极方法WorkbookFactory>,提到使用WorkbookFactory来处理Excel文件数据,最近发现一个问题就是这个办法不能很好的处理各种 ...

  2. poi导出excel,以字符串格式输出数字

    装载自 http://blog.csdn.net/z69183787/article/details/48133809 解决了我数字前面有0被省略问题 做过很多次导出excel了.都碰到一个问题,内容 ...

  3. 使用Apache POI导出Excel小结--导出XLS格式文档

    使用Apache POI导出Excel小结 关于使用Apache POI导出Excel我大概会分三篇文章去写 使用Apache POI导出Excel小结--导出XLS格式文档 使用Apache POI ...

  4. POI对EXCEL的操作【重点:如何设置CELL格式为文本格式】

    实际开发过程中通常用到的就是从数据库导出EXCEL表格了,JXL可以这样做,其实POI也可以(关于JXL与POI的异同可访问我之前总结的文章),之前写过POI对七种文档(当然也包括EXCEL)的内容读 ...

  5. java导入excel时处理日期格式(已验证ok)

    在Excel中的日期格式,比如2009-12-24将其转化为数字格式时变成了40171,在用java处理的时候,读取的也将是40171.如果使用POI处理Excel中的日期类型的单元格时,如果仅仅是判 ...

  6. Java处理Excel中的日期格式

    Java处理Excel中的日期格式 2011-12-23 17:34:03|  分类: java |举报 |字号 订阅 下载LOFTER 我的照片书  |   在Excel中的日期格式,其数值为距离1 ...

  7. Excel 单元格自定义格式技巧总结

    第一部分 Excel 中的单元格格式是一个最基本但是又很高级的技能,说它基本是因为我们几乎天天都会用到它,会用它来设置一些简单的格式,比如日期,文本等等:高级是因为利用 Excel 单元格的自定义格式 ...

  8. Excel 转 vCard格式、CSV格式

    Excel 转vCard格式(常用于Gmail, Yahoo, 163等).CSV格式(常用于Outlook, Foxmail等) 最近公司邮件通讯录需要更新,我就将原来的通讯录给删除了,准备重新导入 ...

  9. poi中如何自定义日期格式

    1. poi的“Quick Guide”中提供了 “How to create date cells ”例子来说明如何创建日期单元格,代码如下: HSSFCellStyle cellStyle = w ...

  10. excel导入时候日期格式转成date

    最近在做导入的时候发现,excel中设置数值格式是不能有日期的那些符号出现的,/ - : 之类的,否则就会变成数字到了java后台,设置成日期,比如 yyyy-mm-dd 到了后台也是数字,即距离19 ...

随机推荐

  1. Android逆向-java代码基础

    作者:I春秋作家——HAI_ 0×00 前言 看这篇可以先看看之前的文章,进行一个了解.Android逆向-java代码基础(1)Android逆向-java代码基础(2) 之前看到有大佬用smali ...

  2. 听补天漏洞审核专家实战讲解XXE漏洞

    对于将“挖洞”作为施展自身才干.展现自身价值方式的白 帽 子来说,听漏洞审核专家讲如何挖掘并验证漏洞,绝对不失为一种快速的成长方式! XXE Injection(XML External Entity ...

  3. php 向二维数组中追加元素

    处理之前的数据: 处理后: //$consult 为往里插之前的数组 //把$arr的元素追加到$consult的最前面 $arr = []; $arr[0]['workplaceId'] = '0' ...

  4. PHP中使用CURL模拟登录并获取数据实例

    cURL 是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数,开发者可以从PHP手册中获取更多关于cURL信 ...

  5. Java之IO(十一)BufferedReader和BufferedWriter

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7074488.html 1.前言 按照字节流的顺序一样,字符流也提供了缓冲字符流,与字节流不同,Java虽然提供了 ...

  6. 程序使用suid应注意的策略

    安全要求程序应使用最小权限执行,然而有的程序由于特殊性,往往在执行某段代码的时候需要提高权限. 由于suid的容易使用特性,很多编程人员往往会直接使用它来实现提高权限的功能,而不是去做代码权限分离.这 ...

  7. Linux 上安装 Couchbase服务

    down: http://www.couchbase.com/downloads/ doc:  http://docs.couchbase.com/archive-index/ forums: htt ...

  8. 【jQuery源码】select方法

    /** * select方法是Sizzle选择器包的核心方法之一,其主要完成下列任务: * 1.调用tokenize方法完成对选择器的解析 * 2.对于没有初始集合(即seed没有赋值)且是单一块选择 ...

  9. 关于Class中的Signature属性

    1.Signature属性:https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.9 2.ClassSigna ...

  10. JAVA使用Gecco爬虫 抓取网页内容(附Demo)

    JAVA 爬虫工具有挺多的,但是Gecco是一个挺轻量方便的工具. 先上项目结构图. 这是一个 JAVASE的 MAVEN 项目,要添加包依赖,其他就四个文件.log4j.properties 加上三 ...