poi导出

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/l1028386804/article/details/79659605

一、概述

相信大家在工作过程中,都会遇到这样一个需求,就是将相关的数据列表导出成excel,那么,有没有通用的导出方式呢,这里,就带着大家一起来用Java实现一个通用的导出Excel的工具。

二、项目实现

1、构建pom.xml

我们的工程是利用Maven来构建的,项目具体搭建过程大家可以参见网上其他资料,这里我们仅给出最核心的Maven配置


 
 
  1. <dependency>
  2. <groupId>org.apache.poi </groupId>
  3. <artifactId>poi-scratchpad </artifactId>
  4. <version>3.11-beta2 </version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.poi </groupId>
  8. <artifactId>poi-ooxml </artifactId>
  9. <version>3.11-beta2 </version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.apache.poi </groupId>
  13. <artifactId>poi-ooxml-schemas </artifactId>
  14. <version>3.11-beta2 </version>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.apache.poi </groupId>
  18. <artifactId>poi-excelant </artifactId>
  19. <version>3.11-beta2 </version>
  20. </dependency>

2、编写ExportExcelUtil类

这个类使我们整个工具的核心,它实现了Excel文件的导出功能,具体代码如下:


 
 
  1. package com.lyz.utils.excel.poi;
  2. import java.io.IOException;
  3. import java.io.OutputStream;
  4. import java.lang.reflect.Field;
  5. import java.lang.reflect.InvocationTargetException;
  6. import java.lang.reflect.Method;
  7. import java.text.SimpleDateFormat;
  8. import java.util.Collection;
  9. import java.util.Date;
  10. import java.util.Iterator;
  11. import java.util.regex.Matcher;
  12. import java.util.regex.Pattern;
  13. import org.apache.commons.lang3.StringUtils;
  14. import org.apache.poi.hssf.usermodel.HSSFCell;
  15. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  16. import org.apache.poi.hssf.usermodel.HSSFFont;
  17. import org.apache.poi.hssf.usermodel.HSSFRichTextString;
  18. import org.apache.poi.hssf.usermodel.HSSFRow;
  19. import org.apache.poi.hssf.usermodel.HSSFSheet;
  20. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  21. import org.apache.poi.hssf.util.HSSFColor;
  22. import org.apache.poi.xssf.usermodel.XSSFCell;
  23. import org.apache.poi.xssf.usermodel.XSSFCellStyle;
  24. import org.apache.poi.xssf.usermodel.XSSFColor;
  25. import org.apache.poi.xssf.usermodel.XSSFFont;
  26. import org.apache.poi.xssf.usermodel.XSSFRichTextString;
  27. import org.apache.poi.xssf.usermodel.XSSFRow;
  28. import org.apache.poi.xssf.usermodel.XSSFSheet;
  29. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  30. /**
  31. * 导出Excel
  32. * @author liuyazhuang
  33. *
  34. * @param <T>
  35. */
  36. public class ExportExcelUtil<T>{
  37. // 2007 版本以上 最大支持1048576行
  38. public final static String EXCEl_FILE_2007 = "2007";
  39. // 2003 版本 最大支持65536 行
  40. public final static String EXCEL_FILE_2003 = "2003";
  41. /**
  42. * <p>
  43. * 导出无头部标题行Excel <br>
  44. * 时间格式默认:yyyy-MM-dd hh:mm:ss <br>
  45. * </p>
  46. *
  47. * @param title 表格标题
  48. * @param dataset 数据集合
  49. * @param out 输出流
  50. * @param version 2003 或者 2007,不传时默认生成2003版本
  51. */
  52. public void exportExcel(String title, Collection<T> dataset, OutputStream out, String version) {
  53. if(StringUtils.isEmpty(version) || EXCEL_FILE_2003.equals(version.trim())){
  54. exportExcel2003(title, null, dataset, out, "yyyy-MM-dd HH:mm:ss");
  55. } else{
  56. exportExcel2007(title, null, dataset, out, "yyyy-MM-dd HH:mm:ss");
  57. }
  58. }
  59. /**
  60. * <p>
  61. * 导出带有头部标题行的Excel <br>
  62. * 时间格式默认:yyyy-MM-dd hh:mm:ss <br>
  63. * </p>
  64. *
  65. * @param title 表格标题
  66. * @param headers 头部标题集合
  67. * @param dataset 数据集合
  68. * @param out 输出流
  69. * @param version 2003 或者 2007,不传时默认生成2003版本
  70. */
  71. public void exportExcel(String title,String[] headers, Collection<T> dataset, OutputStream out,String version) {
  72. if(StringUtils.isBlank(version) || EXCEL_FILE_2003.equals(version.trim())){
  73. exportExcel2003(title, headers, dataset, out, "yyyy-MM-dd HH:mm:ss");
  74. } else{
  75. exportExcel2007(title, headers, dataset, out, "yyyy-MM-dd HH:mm:ss");
  76. }
  77. }
  78. /**
  79. * <p>
  80. * 通用Excel导出方法,利用反射机制遍历对象的所有字段,将数据写入Excel文件中 <br>
  81. * 此版本生成2007以上版本的文件 (文件后缀:xlsx)
  82. * </p>
  83. *
  84. * @param title
  85. * 表格标题名
  86. * @param headers
  87. * 表格头部标题集合
  88. * @param dataset
  89. * 需要显示的数据集合,集合中一定要放置符合JavaBean风格的类的对象。此方法支持的
  90. * JavaBean属性的数据类型有基本数据类型及String,Date
  91. * @param out
  92. * 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
  93. * @param pattern
  94. * 如果有时间数据,设定输出格式。默认为"yyyy-MM-dd hh:mm:ss"
  95. */
  96. @SuppressWarnings({ "unchecked", "rawtypes" })
  97. public void exportExcel2007(String title, String[] headers, Collection<T> dataset, OutputStream out, String pattern) {
  98. // 声明一个工作薄
  99. XSSFWorkbook workbook = new XSSFWorkbook();
  100. // 生成一个表格
  101. XSSFSheet sheet = workbook.createSheet(title);
  102. // 设置表格默认列宽度为15个字节
  103. sheet.setDefaultColumnWidth( 20);
  104. // 生成一个样式
  105. XSSFCellStyle style = workbook.createCellStyle();
  106. // 设置这些样式
  107. style.setFillForegroundColor( new XSSFColor(java.awt.Color.gray));
  108. style.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
  109. style.setBorderBottom(XSSFCellStyle.BORDER_THIN);
  110. style.setBorderLeft(XSSFCellStyle.BORDER_THIN);
  111. style.setBorderRight(XSSFCellStyle.BORDER_THIN);
  112. style.setBorderTop(XSSFCellStyle.BORDER_THIN);
  113. style.setAlignment(XSSFCellStyle.ALIGN_CENTER);
  114. // 生成一个字体
  115. XSSFFont font = workbook.createFont();
  116. font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
  117. font.setFontName( "宋体");
  118. font.setColor( new XSSFColor(java.awt.Color.BLACK));
  119. font.setFontHeightInPoints(( short) 11);
  120. // 把字体应用到当前的样式
  121. style.setFont(font);
  122. // 生成并设置另一个样式
  123. XSSFCellStyle style2 = workbook.createCellStyle();
  124. style2.setFillForegroundColor( new XSSFColor(java.awt.Color.WHITE));
  125. style2.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
  126. style2.setBorderBottom(XSSFCellStyle.BORDER_THIN);
  127. style2.setBorderLeft(XSSFCellStyle.BORDER_THIN);
  128. style2.setBorderRight(XSSFCellStyle.BORDER_THIN);
  129. style2.setBorderTop(XSSFCellStyle.BORDER_THIN);
  130. style2.setAlignment(XSSFCellStyle.ALIGN_CENTER);
  131. style2.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
  132. // 生成另一个字体
  133. XSSFFont font2 = workbook.createFont();
  134. font2.setBoldweight(XSSFFont.BOLDWEIGHT_NORMAL);
  135. // 把字体应用到当前的样式
  136. style2.setFont(font2);
  137. // 产生表格标题行
  138. XSSFRow row = sheet.createRow( 0);
  139. XSSFCell cellHeader;
  140. for ( int i = 0; i < headers.length; i++) {
  141. cellHeader = row.createCell(i);
  142. cellHeader.setCellStyle(style);
  143. cellHeader.setCellValue( new XSSFRichTextString(headers[i]));
  144. }
  145. // 遍历集合数据,产生数据行
  146. Iterator<T> it = dataset.iterator();
  147. int index = 0;
  148. T t;
  149. Field[] fields;
  150. Field field;
  151. XSSFRichTextString richString;
  152. Pattern p = Pattern.compile( "^//d+(//.//d+)?$");
  153. Matcher matcher;
  154. String fieldName;
  155. String getMethodName;
  156. XSSFCell cell;
  157. Class tCls;
  158. Method getMethod;
  159. Object value;
  160. String textValue;
  161. SimpleDateFormat sdf = new SimpleDateFormat(pattern);
  162. while (it.hasNext()) {
  163. index++;
  164. row = sheet.createRow(index);
  165. t = (T) it.next();
  166. // 利用反射,根据JavaBean属性的先后顺序,动态调用getXxx()方法得到属性值
  167. fields = t.getClass().getDeclaredFields();
  168. for ( int i = 0; i < fields.length; i++) {
  169. cell = row.createCell(i);
  170. cell.setCellStyle(style2);
  171. field = fields[i];
  172. fieldName = field.getName();
  173. getMethodName = "get" + fieldName.substring( 0, 1).toUpperCase()
  174. + fieldName.substring( 1);
  175. try {
  176. tCls = t.getClass();
  177. getMethod = tCls.getMethod(getMethodName, new Class[] {});
  178. value = getMethod.invoke(t, new Object[] {});
  179. // 判断值的类型后进行强制类型转换
  180. textValue = null;
  181. if (value instanceof Integer) {
  182. cell.setCellValue((Integer) value);
  183. } else if (value instanceof Float) {
  184. textValue = String.valueOf((Float) value);
  185. cell.setCellValue(textValue);
  186. } else if (value instanceof Double) {
  187. textValue = String.valueOf((Double) value);
  188. cell.setCellValue(textValue);
  189. } else if (value instanceof Long) {
  190. cell.setCellValue((Long) value);
  191. }
  192. if (value instanceof Boolean) {
  193. textValue = "是";
  194. if (!(Boolean) value) {
  195. textValue = "否";
  196. }
  197. } else if (value instanceof Date) {
  198. textValue = sdf.format((Date) value);
  199. } else {
  200. // 其它数据类型都当作字符串简单处理
  201. if (value != null) {
  202. textValue = value.toString();
  203. }
  204. }
  205. if (textValue != null) {
  206. matcher = p.matcher(textValue);
  207. if (matcher.matches()) {
  208. // 是数字当作double处理
  209. cell.setCellValue(Double.parseDouble(textValue));
  210. } else {
  211. richString = new XSSFRichTextString(textValue);
  212. cell.setCellValue(richString);
  213. }
  214. }
  215. } catch (SecurityException e) {
  216. e.printStackTrace();
  217. } catch (NoSuchMethodException e) {
  218. e.printStackTrace();
  219. } catch (IllegalArgumentException e) {
  220. e.printStackTrace();
  221. } catch (IllegalAccessException e) {
  222. e.printStackTrace();
  223. } catch (InvocationTargetException e) {
  224. e.printStackTrace();
  225. } finally {
  226. // 清理资源
  227. }
  228. }
  229. }
  230. try {
  231. workbook.write(out);
  232. } catch (IOException e) {
  233. e.printStackTrace();
  234. }
  235. }
  236. /**
  237. * <p>
  238. * 通用Excel导出方法,利用反射机制遍历对象的所有字段,将数据写入Excel文件中 <br>
  239. * 此方法生成2003版本的excel,文件名后缀:xls <br>
  240. * </p>
  241. *
  242. * @param title
  243. * 表格标题名
  244. * @param headers
  245. * 表格头部标题集合
  246. * @param dataset
  247. * 需要显示的数据集合,集合中一定要放置符合JavaBean风格的类的对象。此方法支持的
  248. * JavaBean属性的数据类型有基本数据类型及String,Date
  249. * @param out
  250. * 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
  251. * @param pattern
  252. * 如果有时间数据,设定输出格式。默认为"yyyy-MM-dd hh:mm:ss"
  253. */
  254. @SuppressWarnings({ "unchecked", "rawtypes" })
  255. public void exportExcel2003(String title, String[] headers, Collection<T> dataset, OutputStream out, String pattern) {
  256. // 声明一个工作薄
  257. HSSFWorkbook workbook = new HSSFWorkbook();
  258. // 生成一个表格
  259. HSSFSheet sheet = workbook.createSheet(title);
  260. // 设置表格默认列宽度为15个字节
  261. sheet.setDefaultColumnWidth( 20);
  262. // 生成一个样式
  263. HSSFCellStyle style = workbook.createCellStyle();
  264. // 设置这些样式
  265. style.setFillForegroundColor(HSSFColor.GREY_50_PERCENT.index);
  266. style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  267. style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  268. style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  269. style.setBorderRight(HSSFCellStyle.BORDER_THIN);
  270. style.setBorderTop(HSSFCellStyle.BORDER_THIN);
  271. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  272. // 生成一个字体
  273. HSSFFont font = workbook.createFont();
  274. font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  275. font.setFontName( "宋体");
  276. font.setColor(HSSFColor.WHITE.index);
  277. font.setFontHeightInPoints(( short) 11);
  278. // 把字体应用到当前的样式
  279. style.setFont(font);
  280. // 生成并设置另一个样式
  281. HSSFCellStyle style2 = workbook.createCellStyle();
  282. style2.setFillForegroundColor(HSSFColor.WHITE.index);
  283. style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
  284. style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
  285. style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
  286. style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
  287. style2.setBorderTop(HSSFCellStyle.BORDER_THIN);
  288. style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
  289. style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
  290. // 生成另一个字体
  291. HSSFFont font2 = workbook.createFont();
  292. font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
  293. // 把字体应用到当前的样式
  294. style2.setFont(font2);
  295. // 产生表格标题行
  296. HSSFRow row = sheet.createRow( 0);
  297. HSSFCell cellHeader;
  298. for ( int i = 0; i < headers.length; i++) {
  299. cellHeader = row.createCell(i);
  300. cellHeader.setCellStyle(style);
  301. cellHeader.setCellValue( new HSSFRichTextString(headers[i]));
  302. }
  303. // 遍历集合数据,产生数据行
  304. Iterator<T> it = dataset.iterator();
  305. int index = 0;
  306. T t;
  307. Field[] fields;
  308. Field field;
  309. HSSFRichTextString richString;
  310. Pattern p = Pattern.compile( "^//d+(//.//d+)?$");
  311. Matcher matcher;
  312. String fieldName;
  313. String getMethodName;
  314. HSSFCell cell;
  315. Class tCls;
  316. Method getMethod;
  317. Object value;
  318. String textValue;
  319. SimpleDateFormat sdf = new SimpleDateFormat(pattern);
  320. while (it.hasNext()) {
  321. index++;
  322. row = sheet.createRow(index);
  323. t = (T) it.next();
  324. // 利用反射,根据JavaBean属性的先后顺序,动态调用getXxx()方法得到属性值
  325. fields = t.getClass().getDeclaredFields();
  326. for ( int i = 0; i < fields.length; i++) {
  327. cell = row.createCell(i);
  328. cell.setCellStyle(style2);
  329. field = fields[i];
  330. fieldName = field.getName();
  331. getMethodName = "get" + fieldName.substring( 0, 1).toUpperCase()
  332. + fieldName.substring( 1);
  333. try {
  334. tCls = t.getClass();
  335. getMethod = tCls.getMethod(getMethodName, new Class[] {});
  336. value = getMethod.invoke(t, new Object[] {});
  337. // 判断值的类型后进行强制类型转换
  338. textValue = null;
  339. if (value instanceof Integer) {
  340. cell.setCellValue((Integer) value);
  341. } else if (value instanceof Float) {
  342. textValue = String.valueOf((Float) value);
  343. cell.setCellValue(textValue);
  344. } else if (value instanceof Double) {
  345. textValue = String.valueOf((Double) value);
  346. cell.setCellValue(textValue);
  347. } else if (value instanceof Long) {
  348. cell.setCellValue((Long) value);
  349. }
  350. if (value instanceof Boolean) {
  351. textValue = "是";
  352. if (!(Boolean) value) {
  353. textValue = "否";
  354. }
  355. } else if (value instanceof Date) {
  356. textValue = sdf.format((Date) value);
  357. } else {
  358. // 其它数据类型都当作字符串简单处理
  359. if (value != null) {
  360. textValue = value.toString();
  361. }
  362. }
  363. if (textValue != null) {
  364. matcher = p.matcher(textValue);
  365. if (matcher.matches()) {
  366. // 是数字当作double处理
  367. cell.setCellValue(Double.parseDouble(textValue));
  368. } else {
  369. richString = new HSSFRichTextString(textValue);
  370. cell.setCellValue(richString);
  371. }
  372. }
  373. } catch (SecurityException e) {
  374. e.printStackTrace();
  375. } catch (NoSuchMethodException e) {
  376. e.printStackTrace();
  377. } catch (IllegalArgumentException e) {
  378. e.printStackTrace();
  379. } catch (IllegalAccessException e) {
  380. e.printStackTrace();
  381. } catch (InvocationTargetException e) {
  382. e.printStackTrace();
  383. } finally {
  384. // 清理资源
  385. }
  386. }
  387. }
  388. try {
  389. workbook.write(out);
  390. } catch (IOException e) {
  391. e.printStackTrace();
  392. }
  393. }
  394. }

为了演示导出功能,这里我们创建了一个Student学生类。

3、创建Student类


 
 
  1. package com.lyz.utils.excel.poi;
  2. /**
  3. * 例子JavaBean
  4. * @author liuyazhuang
  5. *
  6. */
  7. public class Student {
  8. private int id;
  9. private String name;
  10. private String sex;
  11. public Student(int id, String name, String sex) {
  12. this.id = id;
  13. this.name = name;
  14. this.sex = sex;
  15. }
  16. public int getId() {
  17. return id;
  18. }
  19. public void setId(int id) {
  20. this.id = id;
  21. }
  22. public String getName() {
  23. return name;
  24. }
  25. public void setName(String name) {
  26. this.name = name;
  27. }
  28. public String getSex() {
  29. return sex;
  30. }
  31. public void setSex(String sex) {
  32. this.sex = sex;
  33. }
  34. }

4、创建测试类TestExportExcelUtil

这个类,主要是用来测试我们的工具类。具体代码如下:


 
 
  1. package com.lyz.test;
  2. import java.io.FileOutputStream;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import com.lyz.utils.excel.poi.ExportExcelUtil;
  6. import com.lyz.utils.excel.poi.Student;
  7. /**
  8. * 测试文件导出
  9. * @author liuyazhuang
  10. *
  11. */
  12. public class TestExportExcelUtil {
  13. public static void main(String[] args) throws Exception{
  14. ExportExcelUtil<Student> util = new ExportExcelUtil<Student>();
  15. // 准备数据
  16. List<Student> list = new ArrayList<>();
  17. for ( int i = 0; i < 10; i++) {
  18. list.add( new Student( 111, "张三asdf", "男"));
  19. list.add( new Student( 111, "李四asd", "男"));
  20. list.add( new Student( 111, "王五", "女"));
  21. }
  22. String[] columnNames = { "ID", "姓名", "性别" };
  23. util.exportExcel( "用户导出", columnNames, list, new FileOutputStream( "E:/test.xls"), ExportExcelUtil.EXCEL_FILE_2003);
  24. }
  25. }

5、测试

我们运行TestExportExcelUtil类,会发现在我们的E盘下生成了test.xls文件,具体如下:

三、项目扩展

以上实现均是在本地磁盘生成excel文件,但更多的时候,我们需要通过点击网页上的某个按钮来自动生成并下载Excel文档,那么,这又如何实现呢?下面我们就一起来实现这个功能。

1、扩展ExportExcelUtil类

根据Java的继承思想,我们不在ExportExcelUtil类上修改添加,我们创建一个ExportExcelUtil类的子类ExportExcelWrapper,这个类继承ExportExcelUtil的所有功能,同时,扩展了网页生成Excel的功能。具体代码如下:


 
 
  1. package com.lyz.utils.excel.poi;
  2. import java.net.URLEncoder;
  3. import java.util.Collection;
  4. import javax.servlet.http.HttpServletResponse;
  5. import org.apache.commons.lang3.StringUtils;
  6. /**
  7. * 包装类
  8. * @author liuyazhuang
  9. *
  10. * @param <T>
  11. */
  12. public class ExportExcelWrapper<T> extends ExportExcelUtil<T> {
  13. /**
  14. * <p>
  15. * 导出带有头部标题行的Excel <br>
  16. * 时间格式默认:yyyy-MM-dd hh:mm:ss <br>
  17. * </p>
  18. *
  19. * @param title 表格标题
  20. * @param headers 头部标题集合
  21. * @param dataset 数据集合
  22. * @param out 输出流
  23. * @param version 2003 或者 2007,不传时默认生成2003版本
  24. */
  25. public void exportExcel(String fileName, String title, String[] headers, Collection<T> dataset, HttpServletResponse response,String version) {
  26. try {
  27. response.setContentType( "application/vnd.ms-excel");
  28. response.addHeader( "Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName, "UTF-8") + ".xls");
  29. if(StringUtils.isBlank(version) || EXCEL_FILE_2003.equals(version.trim())){
  30. exportExcel2003(title, headers, dataset, response.getOutputStream(), "yyyy-MM-dd hh:mm:ss");
  31. } else{
  32. exportExcel2007(title, headers, dataset, response.getOutputStream(), "yyyy-MM-dd hh:mm:ss");
  33. }
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. }
  37. }
  38. }

这样,我们可以在Controller层调用ExportExcelWrapper将相关的数据和HttpServletResponse传递进来,即可实现通过网页生生并下载Excel文档了。

2、编写Controller类


 
 
  1. @Controller( "test")
  2. @RequestMapping( "/test")
  3. public class TestController {
  4. @RequestMapping( "/get/excel")
  5. public void getExcel(HttpServletRequest request, HttpServletResponse response) throws Exception {
  6. // 准备数据
  7. List<Student> list = new ArrayList<>();
  8. for ( int i = 0; i < 10; i++) {
  9. list.add( new Student( 111, "张三asdf", "男"));
  10. list.add( new Student( 111, "李四asd", "男"));
  11. list.add( new Student( 111, "王五", "女"));
  12. }
  13. String[] columnNames = { "ID", "姓名", " 性别"};
  14. String fileName = "excel1";
  15. ExportExcelWrapper<Student> util = new ExportExcelWrapper<Student>();
  16. util.exportExcel(fileName, fileName, columnNames, list, response, ExportExcelUtil.EXCEL_FILE_2003);
  17. }
  18. }

3、编写index.html

这个网页很简单,具体实现如下:


 
 
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>导出Excel </title>
  6. </head>
  7. <body>
  8. <form id="form_login" action="http://127.0.0.1:8080/test/get/excel" method="post">
  9. </form>
  10. <button id="btn-submit" onclick="beforeSubmit()">Submit </button>
  11. <script type="text/javascript">
  12. var loginForm = document.getElementById( 'form_login');
  13. function beforeSubmit() {
  14. loginForm.submit();
  15. }
  16. </script>
  17. </body>
  18. </html>

4、测试

我们将程序发布到Tomcat,并点击网上的按钮,效果如下:

我们打开excel1.xls文件如下:

至此,我们的工具就编写完成了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java POI是一个开源库,用于处理Microsoft Office格式的文档,特别是Excel (.xls, .xlsx)文件。它提供了一组API,允许Java开发者读取、创建和修改Excel文件。 在Java中使用POI导出Excel的主要步骤包括: 1. 引入依赖:首先需要在项目中添加Apache POI的依赖。如果你使用Maven,可以在pom.xml文件中添加如下代码: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> <!-- 根据最新版本替换 --> </dependency> ``` 2. 创建HSSFWorkbook对象(.xls文件)或XSSFWorkbook对象(.xlsx文件): ```java Workbook workbook = new HSSFWorkbook(); // 对于.xls文件 XSSFWorkbook workbook = new XSSFWorkbook(); // 对于.xlsx文件 ``` 3. 创建Sheet并设置标题行: ```java Sheet sheet = workbook.createSheet("Sheet1"); Row headerRow = sheet.createRow(0); Cell cell = headerRow.createCell(0); // 单元格索引从0开始 cell.setCellValue("标题1"); // 设置单元格内容 ``` 4. 添加数据行: ```java for (int i = 1; i <= 10; i++) { Row dataRow = sheet.createRow(i); dataRow.createCell(0).setCellValue("数据" + i); // 可以继续添加其他列的数据 } ``` 5. 保存文件: ```java try (FileOutputStream outputStream = new FileOutputStream("output.xlsx")) { // 输出流对象 workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } ``` 6. 关闭工作簿: ```java try { workbook.close(); } catch (IOException e) { e.printStackTrace(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值