Demo结构和引用的Jar包

源代码(TestDemo.java)

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

  1. package test;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.FileInputStream;
  5. import java.io.InputStream;
  6. import java.util.ArrayList;
  7.  
  8. import javax.xml.parsers.DocumentBuilderFactory;
  9. import javax.xml.transform.OutputKeys;
  10. import javax.xml.transform.Transformer;
  11. import javax.xml.transform.TransformerFactory;
  12. import javax.xml.transform.dom.DOMSource;
  13. import javax.xml.transform.stream.StreamResult;
  14.  
  15. import org.apache.poi.hssf.converter.ExcelToHtmlConverter;
  16. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  17. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  18. import org.w3c.dom.Document;
  19.  
  20. public class TestDemo {
  21.  
  22. final static String path = "D:\\EclipseWorkspace\\ExcelToHtmlDemo\\ExcelToHtml\\";
  23. final static String file = "TestExcel.xlsx";
  24. private static final String EXCEL_XLS = "xls";
  25. private static final String EXCEL_XLSX = "xlsx";
  26.  
  27. public static void main(String[] args)
  28. {
  29. try{
  30. InputStream input = new FileInputStream(path +"/"+ file);
  31. HSSFWorkbook excelBook = new HSSFWorkbook();
  32. //判断Excel文件将07+版本转换为03版本
  33. if(file.endsWith(EXCEL_XLS)){ //Excel 2003
  34. excelBook = new HSSFWorkbook(input);
  35. }
  36. else if(file.endsWith(EXCEL_XLSX)){ // Excel 2007/2010
  37. Transform xls = new Transform();
  38. XSSFWorkbook workbookOld = new XSSFWorkbook(input);
  39.    xls.transformXSSF(workbookOld, excelBook);
  40. }
  41.  
  42. ExcelToHtmlConverter excelToHtmlConverter = new ExcelToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
  43. //去掉Excel头行
  44. excelToHtmlConverter.setOutputColumnHeaders(false);
  45. //去掉Excel行号
  46. excelToHtmlConverter.setOutputRowNumbers(false);
  47.  
  48. excelToHtmlConverter.processWorkbook(excelBook);
  49.  
  50. Document htmlDocument = excelToHtmlConverter.getDocument();
  51.  
  52. ByteArrayOutputStream outStream = new ByteArrayOutputStream();
  53. DOMSource domSource = new DOMSource(htmlDocument);
  54. StreamResult streamResult = new StreamResult(outStream);
  55. TransformerFactory tf = TransformerFactory.newInstance();
  56. Transformer serializer = tf.newTransformer();
  57.  
  58. serializer.setOutputProperty(OutputKeys.ENCODING, "gb2312");
  59. serializer.setOutputProperty(OutputKeys.INDENT, "yes");
  60. serializer.setOutputProperty(OutputKeys.METHOD, "html");
  61.  
  62. serializer.transform(domSource, streamResult);
  63. outStream.close();
  64.  
  65. //Excel转换成Html
  66. String content = new String(outStream.toByteArray());
  67. System.out.println(content);
  68. }
  69. catch(Exception e) {
  70. e.printStackTrace();
  71. }
  72. }
  73. }

 

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

  1. package test;
  2.  
  3. import java.util.HashMap;
  4.  
  5. import org.apache.poi.hssf.usermodel.HSSFCell;
  6. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  7. import org.apache.poi.hssf.usermodel.HSSFFont;
  8. import org.apache.poi.hssf.usermodel.HSSFRow;
  9. import org.apache.poi.hssf.usermodel.HSSFSheet;
  10. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  11. import org.apache.poi.ss.usermodel.Cell;
  12. import org.apache.poi.ss.usermodel.DataFormat;
  13. import org.apache.poi.ss.usermodel.Row;
  14. import org.apache.poi.ss.usermodel.Sheet;
  15. import org.apache.poi.ss.util.CellRangeAddress;
  16. import org.apache.poi.xssf.usermodel.XSSFCell;
  17. import org.apache.poi.xssf.usermodel.XSSFCellStyle;
  18. import org.apache.poi.xssf.usermodel.XSSFFont;
  19. import org.apache.poi.xssf.usermodel.XSSFRow;
  20. import org.apache.poi.xssf.usermodel.XSSFSheet;
  21. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  22.  
  23. public class Transform {
  24.  
  25. private int lastColumn = 0;
  26. private HashMap<Integer, HSSFCellStyle> styleMap = new HashMap();
  27.  
  28. public void transformXSSF(XSSFWorkbook workbookOld, HSSFWorkbook workbookNew) {
  29. HSSFSheet sheetNew;
  30. XSSFSheet sheetOld;
  31.  
  32. workbookNew.setMissingCellPolicy(workbookOld.getMissingCellPolicy());
  33.  
  34. for (int i = 0; i < workbookOld.getNumberOfSheets(); i++) {
  35. sheetOld = workbookOld.getSheetAt(i);
  36. sheetNew = workbookNew.getSheet(sheetOld.getSheetName());
  37. sheetNew = workbookNew.createSheet(sheetOld.getSheetName());
  38. this.transform(workbookOld, workbookNew, sheetOld, sheetNew);
  39. }
  40. }
  41.  
  42. private void transform(XSSFWorkbook workbookOld, HSSFWorkbook workbookNew,
  43. XSSFSheet sheetOld, HSSFSheet sheetNew) {
  44.  
  45. sheetNew.setDisplayFormulas(sheetOld.isDisplayFormulas());
  46. sheetNew.setDisplayGridlines(sheetOld.isDisplayGridlines());
  47. sheetNew.setDisplayGuts(sheetOld.getDisplayGuts());
  48. sheetNew.setDisplayRowColHeadings(sheetOld.isDisplayRowColHeadings());
  49. sheetNew.setDisplayZeros(sheetOld.isDisplayZeros());
  50. sheetNew.setFitToPage(sheetOld.getFitToPage());
  51.  
  52. sheetNew.setHorizontallyCenter(sheetOld.getHorizontallyCenter());
  53. sheetNew.setMargin(Sheet.BottomMargin,
  54. sheetOld.getMargin(Sheet.BottomMargin));
  55. sheetNew.setMargin(Sheet.FooterMargin,
  56. sheetOld.getMargin(Sheet.FooterMargin));
  57. sheetNew.setMargin(Sheet.HeaderMargin,
  58. sheetOld.getMargin(Sheet.HeaderMargin));
  59. sheetNew.setMargin(Sheet.LeftMargin,
  60. sheetOld.getMargin(Sheet.LeftMargin));
  61. sheetNew.setMargin(Sheet.RightMargin,
  62. sheetOld.getMargin(Sheet.RightMargin));
  63. sheetNew.setMargin(Sheet.TopMargin, sheetOld.getMargin(Sheet.TopMargin));
  64. sheetNew.setPrintGridlines(sheetNew.isPrintGridlines());
  65. sheetNew.setRightToLeft(sheetNew.isRightToLeft());
  66. sheetNew.setRowSumsBelow(sheetNew.getRowSumsBelow());
  67. sheetNew.setRowSumsRight(sheetNew.getRowSumsRight());
  68. sheetNew.setVerticallyCenter(sheetOld.getVerticallyCenter());
  69.  
  70. HSSFRow rowNew;
  71. for (Row row : sheetOld) {
  72. rowNew = sheetNew.createRow(row.getRowNum());
  73. if (rowNew != null)
  74. this.transform(workbookOld, workbookNew, (XSSFRow) row, rowNew);
  75. }
  76.  
  77. for (int i = 0; i < this.lastColumn; i++) {
  78. sheetNew.setColumnWidth(i, sheetOld.getColumnWidth(i));
  79. sheetNew.setColumnHidden(i, sheetOld.isColumnHidden(i));
  80. }
  81.  
  82. for (int i = 0; i < sheetOld.getNumMergedRegions(); i++) {
  83. CellRangeAddress merged = sheetOld.getMergedRegion(i);
  84. sheetNew.addMergedRegion(merged);
  85. }
  86. }
  87.  
  88. private void transform(XSSFWorkbook workbookOld, HSSFWorkbook workbookNew,
  89. XSSFRow rowOld, HSSFRow rowNew) {
  90. HSSFCell cellNew;
  91. rowNew.setHeight(rowOld.getHeight());
  92.  
  93. for (Cell cell : rowOld) {
  94. cellNew = rowNew.createCell(cell.getColumnIndex(),
  95. cell.getCellType());
  96. if (cellNew != null)
  97. this.transform(workbookOld, workbookNew, (XSSFCell) cell,
  98. cellNew);
  99. }
  100. this.lastColumn = Math.max(this.lastColumn, rowOld.getLastCellNum());
  101. }
  102.  
  103. private void transform(XSSFWorkbook workbookOld, HSSFWorkbook workbookNew,
  104. XSSFCell cellOld, HSSFCell cellNew) {
  105. cellNew.setCellComment(cellOld.getCellComment());
  106.  
  107. Integer hash = cellOld.getCellStyle().hashCode();
  108. if (this.styleMap != null && !this.styleMap.containsKey(hash)) {
  109. this.transform(workbookOld, workbookNew, hash,
  110. cellOld.getCellStyle(),
  111. (HSSFCellStyle) workbookNew.createCellStyle());
  112. }
  113. cellNew.setCellStyle(this.styleMap.get(hash));
  114.  
  115. switch (cellOld.getCellType()) {
  116. case Cell.CELL_TYPE_BLANK:
  117. break;
  118. case Cell.CELL_TYPE_BOOLEAN:
  119. cellNew.setCellValue(cellOld.getBooleanCellValue());
  120. break;
  121. case Cell.CELL_TYPE_ERROR:
  122. cellNew.setCellValue(cellOld.getErrorCellValue());
  123. break;
  124. case Cell.CELL_TYPE_FORMULA:
  125. cellNew.setCellValue(cellOld.getCellFormula());
  126. break;
  127. case Cell.CELL_TYPE_NUMERIC:
  128. cellNew.setCellValue(cellOld.getNumericCellValue());
  129. break;
  130. case Cell.CELL_TYPE_STRING:
  131. cellNew.setCellValue(cellOld.getStringCellValue());
  132. break;
  133. default:
  134. System.out.println("transform: Unbekannter Zellentyp "
  135. + cellOld.getCellType());
  136. }
  137. }
  138.  
  139. private void transform(XSSFWorkbook workbookOld, HSSFWorkbook workbookNew,
  140. Integer hash, XSSFCellStyle styleOld, HSSFCellStyle styleNew) {
  141. styleNew.setAlignment(styleOld.getAlignment());
  142. styleNew.setBorderBottom(styleOld.getBorderBottom());
  143. styleNew.setBorderLeft(styleOld.getBorderLeft());
  144. styleNew.setBorderRight(styleOld.getBorderRight());
  145. styleNew.setBorderTop(styleOld.getBorderTop());
  146. styleNew.setDataFormat(this.transform(workbookOld, workbookNew,
  147. styleOld.getDataFormat()));
  148. styleNew.setFillBackgroundColor(styleOld.getFillBackgroundColor());
  149. styleNew.setFillForegroundColor(styleOld.getFillForegroundColor());
  150. styleNew.setFillPattern(styleOld.getFillPattern());
  151. styleNew.setFont(this.transform(workbookNew,
  152. (XSSFFont) styleOld.getFont()));
  153. styleNew.setHidden(styleOld.getHidden());
  154. styleNew.setIndention(styleOld.getIndention());
  155. styleNew.setLocked(styleOld.getLocked());
  156. styleNew.setVerticalAlignment(styleOld.getVerticalAlignment());
  157. styleNew.setWrapText(styleOld.getWrapText());
  158. this.styleMap.put(hash, styleNew);
  159. }
  160.  
  161. private short transform(XSSFWorkbook workbookOld, HSSFWorkbook workbookNew,
  162. short index) {
  163. DataFormat formatOld = workbookOld.createDataFormat();
  164. DataFormat formatNew = workbookNew.createDataFormat();
  165. return formatNew.getFormat(formatOld.getFormat(index));
  166. }
  167.  
  168. private HSSFFont transform(HSSFWorkbook workbookNew, XSSFFont fontOld) {
  169. HSSFFont fontNew = workbookNew.createFont();
  170. fontNew.setBoldweight(fontOld.getBoldweight());
  171. fontNew.setCharSet(fontOld.getCharSet());
  172. fontNew.setColor(fontOld.getColor());
  173. fontNew.setFontName(fontOld.getFontName());
  174. fontNew.setFontHeight(fontOld.getFontHeight());
  175. fontNew.setItalic(fontOld.getItalic());
  176. fontNew.setStrikeout(fontOld.getStrikeout());
  177. fontNew.setTypeOffset(fontOld.getTypeOffset());
  178. fontNew.setUnderline(fontOld.getUnderline());
  179. return fontNew;
  180. }
  181. }

(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. Cordova - CordovaError: Promise rejected with non-error: 'ios-deploy was not found

    错误信息: CordovaError: Promise rejected with non-error: 'ios-deploy was not found. Please download, bui ...

  2. uiautomator2

    uiautomator2    该项目正在火热的开发中 uiautomator2 是一个可以使用Python对Android设备进行UI自动化的库.其底层基于Google uiautomator,Go ...

  3. 队列的实现——c++

    一.介绍 队列(Queue),是一种线性存储结构.它有以下几个特点:(01) 队列中数据是按照"先进先出(FIFO, First-In-First-Out)"方式进出队列的.(02 ...

  4. CDN添加流程

    CDN的全称是Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更稳定.通过在网络各处放置节 ...

  5. JS: 防抖节流

    防抖节流 防抖(debounce) 先来看看下面的代码: //触发滚动事件,num 就加1 let num = 0; function incNum() { console.log('鼠标滚动中'); ...

  6. GDOI2018滚粗记

    day-50: 高中全体成员去了北京训练,我被虐成傻逼(貌似总分全校倒数第2). day-20: 回广州了,间断式略微考好55555..... day0: 早上起床好像有点晚qwq 然后简单打了个FF ...

  7. POJ 1298

    #include<iostream>// chengdacaizi 注释!2008 11 05 #include<string> using namespace std; in ...

  8. IOC容器02

    获取xml文件路径,使用IO读取xml文件,使用Document对象解析xml文件,将xml中的bean的信息注册到BeanDefinition类,将BeanDefinition保存到一个map中:该 ...

  9. JVM-Java8的MetaSpace

    Java 8 彻底将永久代 (PermGen) 移除出了 HotSpot JVM,将其原有的数据迁移至 Java Heap 或 Metaspace 为什么取消了永久代而用MetaSpace代替了永久代 ...

  10. tensorflow VocabularyProcessor

    from tensorflow.contrib import learn import numpy as np vocab_process = learn.preprocessing.Vocabula ...