java excel导出 通用

jar包 poi-3.9

后台代码:

 
  1. package lcy._41_50;

  2.  
  3. import java.io.FileOutputStream;

  4. import java.io.OutputStream;

  5. import java.net.URLEncoder;

  6.  
  7. import javax.servlet.http.HttpServletResponse;

  8.  
  9. import org.apache.poi.hssf.usermodel.HSSFCell;

  10. import org.apache.poi.hssf.usermodel.HSSFCellStyle;

  11. import org.apache.poi.hssf.usermodel.HSSFFont;

  12. import org.apache.poi.hssf.usermodel.HSSFRow;

  13. import org.apache.poi.hssf.usermodel.HSSFSheet;

  14. import org.apache.poi.hssf.usermodel.HSSFWorkbook;

  15. import org.apache.poi.hssf.util.CellRangeAddress;

  16. import org.apache.poi.hssf.util.HSSFColor;

  17.  
  18. @SuppressWarnings( { "deprecation" })

  19. public class Test46 {

  20.  
  21. public static void main(String[] args) throws Exception {

  22.  
  23. String sheetName = "采购统计单";

  24. String titleName = "采购统计单";

  25. String fileName = "采购统计单";

  26. int columnNumber = 3;

  27. int[] columnWidth = { 33, 22, 44 };

  28. String[][] dataList = { { "1", "2018-01-01", "打印纸" },

  29. { "2", "2017-09-02", "碳素笔" }, { "3", "2017-12-03", "文档盒" } };

  30. String[] columnName = { "序号", "采购时间", "物品名称" };

  31. new Test46().ExportNoResponse(sheetName, titleName, fileName,

  32. columnNumber, columnWidth, columnName, dataList);

  33. }

  34.  
  35. public void ExportWithResponse(String sheetName, String titleName,

  36. String fileName, int columnNumber, int[] columnWidth,

  37. String[] columnName, String[][] dataList,

  38. HttpServletResponse response) throws Exception {

  39. if (columnNumber == columnWidth.length&& columnWidth.length == columnName.length) {

  40. // 第一步,创建一个webbook,对应一个Excel文件

  41. HSSFWorkbook wb = new HSSFWorkbook();

  42. // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet

  43. HSSFSheet sheet = wb.createSheet(sheetName);

  44. // sheet.setDefaultColumnWidth(15); //统一设置列宽

  45. for (int i = 0; i < columnNumber; i++)

  46. {

  47. for (int j = 0; j <= i; j++)

  48. {

  49. if (i == j)

  50. {

  51. sheet.setColumnWidth(i, columnWidth[j] * 256); // 单独设置每列的宽

  52. }

  53. }

  54. }

  55. // 创建第0行 也就是标题

  56. HSSFRow row1 = sheet.createRow((int) 0);

  57. row1.setHeightInPoints(50);// 设备标题的高度

  58. // 第三步创建标题的单元格样式style2以及字体样式headerFont1

  59. HSSFCellStyle style2 = wb.createCellStyle();

  60. style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);

  61. style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

  62. style2.setFillForegroundColor(HSSFColor.LIGHT_TURQUOISE.index);

  63. style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

  64. HSSFFont headerFont1 = (HSSFFont) wb.createFont(); // 创建字体样式

  65. headerFont1.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字体加粗

  66. headerFont1.setFontName("黑体"); // 设置字体类型

  67. headerFont1.setFontHeightInPoints((short) 15); // 设置字体大小

  68. style2.setFont(headerFont1); // 为标题样式设置字体样式

  69.  
  70. HSSFCell cell1 = row1.createCell(0);// 创建标题第一列

  71. sheet.addMergedRegion(new CellRangeAddress(0, 0, 0,

  72. columnNumber - 1)); // 合并列标题

  73. cell1.setCellValue(titleName); // 设置值标题

  74. cell1.setCellStyle(style2); // 设置标题样式

  75.  
  76. // 创建第1行 也就是表头

  77. HSSFRow row = sheet.createRow((int) 1);

  78. row.setHeightInPoints(37);// 设置表头高度

  79.  
  80. // 第四步,创建表头单元格样式 以及表头的字体样式

  81. HSSFCellStyle style = wb.createCellStyle();

  82. style.setWrapText(true);// 设置自动换行

  83. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

  84. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建一个居中格式

  85.  
  86. style.setBottomBorderColor(HSSFColor.BLACK.index);

  87. style.setBorderBottom(HSSFCellStyle.BORDER_THIN);

  88. style.setBorderLeft(HSSFCellStyle.BORDER_THIN);

  89. style.setBorderRight(HSSFCellStyle.BORDER_THIN);

  90. style.setBorderTop(HSSFCellStyle.BORDER_THIN);

  91.  
  92. HSSFFont headerFont = (HSSFFont) wb.createFont(); // 创建字体样式

  93. headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字体加粗

  94. headerFont.setFontName("黑体"); // 设置字体类型

  95. headerFont.setFontHeightInPoints((short) 10); // 设置字体大小

  96. style.setFont(headerFont); // 为标题样式设置字体样式

  97.  
  98. // 第四.一步,创建表头的列

  99. for (int i = 0; i < columnNumber; i++)

  100. {

  101. HSSFCell cell = row.createCell(i);

  102. cell.setCellValue(columnName[i]);

  103. cell.setCellStyle(style);

  104. }

  105.  
  106. // 第五步,创建单元格,并设置值

  107. for (int i = 0; i < dataList.length; i++)

  108. {

  109. row = sheet.createRow((int) i + 2);

  110. // 为数据内容设置特点新单元格样式1 自动换行 上下居中

  111. HSSFCellStyle zidonghuanhang = wb.createCellStyle();

  112. zidonghuanhang.setWrapText(true);// 设置自动换行

  113. zidonghuanhang.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建一个居中格式

  114.  
  115. // 设置边框

  116. zidonghuanhang.setBottomBorderColor(HSSFColor.BLACK.index);

  117. zidonghuanhang.setBorderBottom(HSSFCellStyle.BORDER_THIN);

  118. zidonghuanhang.setBorderLeft(HSSFCellStyle.BORDER_THIN);

  119. zidonghuanhang.setBorderRight(HSSFCellStyle.BORDER_THIN);

  120. zidonghuanhang.setBorderTop(HSSFCellStyle.BORDER_THIN);

  121.  
  122. // 为数据内容设置特点新单元格样式2 自动换行 上下居中左右也居中

  123. HSSFCellStyle zidonghuanhang2 = wb.createCellStyle();

  124. zidonghuanhang2.setWrapText(true);// 设置自动换行

  125. zidonghuanhang2

  126. .setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建一个上下居中格式

  127. zidonghuanhang2.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中

  128.  
  129. // 设置边框

  130. zidonghuanhang2.setBottomBorderColor(HSSFColor.BLACK.index);

  131. zidonghuanhang2.setBorderBottom(HSSFCellStyle.BORDER_THIN);

  132. zidonghuanhang2.setBorderLeft(HSSFCellStyle.BORDER_THIN);

  133. zidonghuanhang2.setBorderRight(HSSFCellStyle.BORDER_THIN);

  134. zidonghuanhang2.setBorderTop(HSSFCellStyle.BORDER_THIN);

  135. HSSFCell datacell = null;

  136. for (int j = 0; j < columnNumber; j++)

  137. {

  138. datacell = row.createCell(j);

  139. datacell.setCellValue(dataList[i][j]);

  140. datacell.setCellStyle(zidonghuanhang2);

  141. }

  142. }

  143.  
  144. // 第六步,将文件存到浏览器设置的下载位置

  145. String filename = fileName + ".xls";

  146. response.setContentType("application/ms-excel;charset=UTF-8");

  147. response.setHeader("Content-Disposition", "attachment;filename="

  148. .concat(String.valueOf(URLEncoder.encode(filename, "UTF-8"))));

  149. OutputStream out = response.getOutputStream();

  150. try {

  151. wb.write(out);// 将数据写出去

  152. String str = "导出" + fileName + "成功!";

  153. System.out.println(str);

  154. } catch (Exception e) {

  155. e.printStackTrace();

  156. String str1 = "导出" + fileName + "失败!";

  157. System.out.println(str1);

  158. } finally {

  159. out.close();

  160. }

  161.  
  162. } else {

  163. System.out.println("列数目长度名称三个数组长度要一致");

  164. }

  165.  
  166. }

  167.  
  168. public void ExportNoResponse(String sheetName, String titleName,

  169. String fileName, int columnNumber, int[] columnWidth,

  170. String[] columnName, String[][] dataList) throws Exception {

  171. if (columnNumber == columnWidth.length&& columnWidth.length == columnName.length) {

  172. // 第一步,创建一个webbook,对应一个Excel文件

  173. HSSFWorkbook wb = new HSSFWorkbook();

  174. // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet

  175. HSSFSheet sheet = wb.createSheet(sheetName);

  176. // sheet.setDefaultColumnWidth(15); //统一设置列宽

  177. for (int i = 0; i < columnNumber; i++)

  178. {

  179. for (int j = 0; j <= i; j++)

  180. {

  181. if (i == j)

  182. {

  183. sheet.setColumnWidth(i, columnWidth[j] * 256); // 单独设置每列的宽

  184. }

  185. }

  186. }

  187. // 创建第0行 也就是标题

  188. HSSFRow row1 = sheet.createRow((int) 0);

  189. row1.setHeightInPoints(50);// 设备标题的高度

  190. // 第三步创建标题的单元格样式style2以及字体样式headerFont1

  191. HSSFCellStyle style2 = wb.createCellStyle();

  192. style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);

  193. style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

  194. style2.setFillForegroundColor(HSSFColor.LIGHT_TURQUOISE.index);

  195. style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

  196. HSSFFont headerFont1 = (HSSFFont) wb.createFont(); // 创建字体样式

  197. headerFont1.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字体加粗

  198. headerFont1.setFontName("黑体"); // 设置字体类型

  199. headerFont1.setFontHeightInPoints((short) 15); // 设置字体大小

  200. style2.setFont(headerFont1); // 为标题样式设置字体样式

  201.  
  202. HSSFCell cell1 = row1.createCell(0);// 创建标题第一列

  203. sheet.addMergedRegion(new CellRangeAddress(0, 0, 0,

  204. columnNumber - 1)); // 合并第0到第17列

  205. cell1.setCellValue(titleName); // 设置值标题

  206. cell1.setCellStyle(style2); // 设置标题样式

  207.  
  208. // 创建第1行 也就是表头

  209. HSSFRow row = sheet.createRow((int) 1);

  210. row.setHeightInPoints(37);// 设置表头高度

  211.  
  212. // 第四步,创建表头单元格样式 以及表头的字体样式

  213. HSSFCellStyle style = wb.createCellStyle();

  214. style.setWrapText(true);// 设置自动换行

  215. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

  216. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建一个居中格式

  217.  
  218. style.setBottomBorderColor(HSSFColor.BLACK.index);

  219. style.setBorderBottom(HSSFCellStyle.BORDER_THIN);

  220. style.setBorderLeft(HSSFCellStyle.BORDER_THIN);

  221. style.setBorderRight(HSSFCellStyle.BORDER_THIN);

  222. style.setBorderTop(HSSFCellStyle.BORDER_THIN);

  223.  
  224. HSSFFont headerFont = (HSSFFont) wb.createFont(); // 创建字体样式

  225. headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字体加粗

  226. headerFont.setFontName("黑体"); // 设置字体类型

  227. headerFont.setFontHeightInPoints((short) 10); // 设置字体大小

  228. style.setFont(headerFont); // 为标题样式设置字体样式

  229.  
  230. // 第四.一步,创建表头的列

  231. for (int i = 0; i < columnNumber; i++)

  232. {

  233. HSSFCell cell = row.createCell(i);

  234. cell.setCellValue(columnName[i]);

  235. cell.setCellStyle(style);

  236. }

  237.  
  238. // 第五步,创建单元格,并设置值

  239. for (int i = 0; i < dataList.length; i++)

  240. {

  241. row = sheet.createRow((int) i + 2);

  242. // 为数据内容设置特点新单元格样式1 自动换行 上下居中

  243. HSSFCellStyle zidonghuanhang = wb.createCellStyle();

  244. zidonghuanhang.setWrapText(true);// 设置自动换行

  245. zidonghuanhang

  246. .setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建一个居中格式

  247.  
  248. // 设置边框

  249. zidonghuanhang.setBottomBorderColor(HSSFColor.BLACK.index);

  250. zidonghuanhang.setBorderBottom(HSSFCellStyle.BORDER_THIN);

  251. zidonghuanhang.setBorderLeft(HSSFCellStyle.BORDER_THIN);

  252. zidonghuanhang.setBorderRight(HSSFCellStyle.BORDER_THIN);

  253. zidonghuanhang.setBorderTop(HSSFCellStyle.BORDER_THIN);

  254.  
  255. // 为数据内容设置特点新单元格样式2 自动换行 上下居中左右也居中

  256. HSSFCellStyle zidonghuanhang2 = wb.createCellStyle();

  257. zidonghuanhang2.setWrapText(true);// 设置自动换行

  258. zidonghuanhang2

  259. .setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 创建一个上下居中格式

  260. zidonghuanhang2.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中

  261.  
  262. // 设置边框

  263. zidonghuanhang2.setBottomBorderColor(HSSFColor.BLACK.index);

  264. zidonghuanhang2.setBorderBottom(HSSFCellStyle.BORDER_THIN);

  265. zidonghuanhang2.setBorderLeft(HSSFCellStyle.BORDER_THIN);

  266. zidonghuanhang2.setBorderRight(HSSFCellStyle.BORDER_THIN);

  267. zidonghuanhang2.setBorderTop(HSSFCellStyle.BORDER_THIN);

  268. HSSFCell datacell = null;

  269. for (int j = 0; j < columnNumber; j++)

  270. {

  271. datacell = row.createCell(j);

  272. datacell.setCellValue(dataList[i][j]);

  273. datacell.setCellStyle(zidonghuanhang2);

  274. }

  275. }

  276.  
  277. // 第六步,将文件存到指定位置

  278. try {

  279. FileOutputStream fout = new FileOutputStream("D:students.xls");

  280. wb.write(fout);

  281. String str = "导出" + fileName + "成功!";

  282. System.out.println(str);

  283. fout.close();

  284. } catch (Exception e) {

  285. e.printStackTrace();

  286. String str1 = "导出" + fileName + "失败!";

  287. System.out.println(str1);

  288. }

  289. } else {

  290. System.out.println("列数目长度名称三个数组长度要一致");

  291. }

  292.  
  293. }

  294.  
  295. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java是一种通用的高级编程语言,通过Java编写程序可以实现各种功能,包括Excel的导入和导出。在Java中,可以使用Apache POI来操作Excel文件,Apache POI是一个流行的用于读写Microsoft Office文件的Java库,它包括HSSF(用于读写Excel 97-2003),XSSF(用于读写Excel 2007+)和SS(实验性的通用Spiral包)。 在Java中使用Apache POI进行Excel导入时,首先需要创建一个Workbook对象,该对象可以是XSSFWorkbook(用于.xlsx文件格式),也可以是HSSFWorkbook(用于.xls文件格式)。一旦获得了Workbook对象,就可以从工作表中获取数据。对于每个工作表,都可以使用Sheet对象访问单元格中的值,并使用Row对象访问单元格中的列数据。 在Excel导出方面,在Java中使用Apache POI可以创建Excel文档并向其中添加数据。要创建一个Excel文档,首先需要创建一个Workbook对象,然后添加一个或多个工作表。对于每个工作表,可以使用Sheet对象访问单元格,并使用Row对象访问列数据。将数据添加到单元格后,可以使用FileOutputStream将文档写入指定的文件。 总的来说,使用Java进行Excel导入导出是一种非常灵活和高效的方法,可以通过学习和使用Apache POI等工具来实现。 ### 回答2: Java是一个跨平台的编程语言,它可以很好地进行Excel文件的导入和导出Java提供了一些库,比如Apache POI,用于操作Excel文件。通过这些库,我们可以在Java中进行Excel文件的读取和写入。 Excel的导入和导出可以用来处理各种数据,这对于企业来说非常有用。因为数据是企业的核心资产之一,所以正确导入和导出数据是非常重要的。Java对于处理Excel数据非常方便,我们可以很容易地将数据转换成Java对象,然后以任何我们需要的方式进行处理。 在使用Java进行Excel的导入和导出时,我们需要先导入Apache POI库。通过这个库,我们可以调用其提供的方法来操作Excel文件。例如,我们可以通过创建Workbook对象来读取Excel文件,并通过Sheet对象访问工作表中的单元格。 对于Excel导出,我们首先需要定义Excel模板,然后使用Java代码填充模板。我们可以通过创建Workbook对象来创建新的工作簿。然后,我们可以创建一个Sheet对象,然后使用Row对象和Cell对象来创建表格。最后,我们将表格数据写入Excel文件中。 总而言之,Java提供了快速,可靠的Excel导入和导出解决方案。这对于企业来说非常重要,因为数据是企业运营的核心资产。利用JavaExcel导入和导出功能,企业可以更好地处理数据并提高效率。 ### 回答3: Java中导入和导出Excel文档是非常常见的操作,可以根据具体需求使用Java自带的API或者开源框架完成。本文将重点介绍Apache POI和EasyExcel两个开源框架的使用。 一、Apache POI Apache POI是Apache软件基金会的一个开源项目,提供基于Java的API用于处理Microsoft Office格式文件。其中包括Word、Excel和PowerPoint等文档的读写操作,对于Excel的读写操作使用的是XSSF和HSSF两个模块,分别支持.xlsx和.xls格式的文件。 1.导入Excel 首先需要导入POI的jar包,然后使用以下代码读取Excel中的数据: ``` File file = new File("test.xlsx"); InputStream inputStream = new FileInputStream(file); Workbook workbook = new XSSFWorkbook(inputStream);//读取xlsx格式 //Workbook workbook = new HSSFWorkbook(inputStream);//读取xls格式 Sheet sheet = workbook.getSheetAt(0);//获取第一个sheet Iterator<Row> iterator = sheet.iterator(); while(iterator.hasNext()) { Row row = iterator.next(); Iterator<Cell> cellIterator = row.cellIterator(); while(cellIterator .hasNext()) { Cell cell = cellIterator.next(); switch (cell.getCellType()) { case STRING: System.out.print(cell.getStringCellValue() + " "); break; case NUMERIC: System.out.print(cell.getNumericCellValue() + " "); break; case BOOLEAN: System.out.print(cell.getBooleanCellValue() + " "); break; case FORMULA: System.out.print(cell.getCellFormula() + " "); break; default: System.out.print(""); } } System.out.println();//换行 } inputStream.close(); ``` 2.导出Excel 基于POI的Excel导出主要是通过创建Workbook对象、Sheet对象和Cell对象,然后将数据填充到Cell对象中,最后输出到文件中。以下是导出Excel的示例代码: ``` Workbook workbook = new XSSFWorkbook();//创建工作簿 Sheet sheet = workbook.createSheet("sheet0");//创建sheet Row row = sheet.createRow(0);//创建行 Cell cell = row.createCell(0);//创建单元格 cell.setCellValue("姓名"); cell = row.createCell(1); cell.setCellValue("年龄"); cell = row.createCell(2); cell.setCellValue("性别"); row = sheet.createRow(1);//创建行 cell = row.createCell(0); cell.setCellValue("张三"); cell = row.createCell(1); cell.setCellValue(20); cell = row.createCell(2); cell.setCellValue("男"); FileOutputStream outputStream = new FileOutputStream("test.xlsx");//输出到文件 workbook.write(outputStream); outputStream.close(); ``` 二、EasyExcel EasyExcel是一个基于POI封装的Java开源框架,提供简单易用的方式完成Excel的导入和导出操作。相对于POI,EasyExcel的优点在于它的API更加简单明了,使用起来更加方便快捷。 1.导入Excel EasyExcel导入Excel的方式主要是通过读取监听器实现,可以实现不同sheet的读取、数据转换和对数据的处理等功能。以下是导入Excel的示例代码: ``` //创建读取监听器 public class ExcelListener extends AnalysisEventListener<User> { private List<User> userList = new ArrayList<>(); @Override public void invoke(User user, AnalysisContext analysisContext) { userList.add(user);//每读取一条数据就添加到List中 } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { //读取完成后的操作 } public List<User> getUserList() { return userList; } public void setUserList(List<User> userList) { this.userList = userList; } } //使用监听器读取Excel数据 File file = new File("test.xlsx"); EasyExcel.read(file, User.class, new ExcelListener()).sheet().doRead(); ``` 2.导出Excel EasyExcel导出Excel的方式主要是通过生成器模式创建写入对象、构造sheet页和单元格,最后输出到文件或者流中。以下是导出Excel的示例代码: ``` //创建写入对象 ExcelWriter writer = EasyExcel.write("test.xlsx", User.class).build(); //构造sheet页和单元格 WriteSheet sheet = EasyExcel.writerSheet("sheet0").build(); //填充数据到单元格 List<User> userList = new ArrayList<>(); userList.add(new User("张三", 20, "男")); userList.add(new User("李四", 22, "女")); writer.write(userList, sheet); //输出到文件或者流中 writer.finish(); ``` 总结 以上是Apache POI和EasyExcel两个框架的Excel导入导出操作,两者都十分流行和实用,可以根据项目需求进行选择。在实际开发中,需要注意的是Excel的版本问题、数据类型的转换、异常处理等,并加以优化和完善,从而提高代码的可维护性和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值