1. import com.google.common.collect.Lists;
  2. import com.google.common.collect.Maps;
  3. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  4. import org.apache.poi.ss.usermodel.*;
  5. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8.  
  9. import java.io.File;
  10. import java.io.FileOutputStream;
  11. import java.io.IOException;
  12. import java.io.OutputStream;
  13. import java.text.SimpleDateFormat;
  14. import java.util.*;
  15.  
  16. public class WriterExcelUtil {
  17.  
  18. private static final Logger LOGGER = LoggerFactory.getLogger(WriterExcelUtil.class.getName());
  19.  
  20. public static void main(String[] args) {
  21. String path = "E://demo.xlsx";
  22. String name = "test";
  23. List<String> titles =Lists.newArrayList();
  24. titles.add("id");
  25. titles.add("name");
  26. titles.add("age");
  27. titles.add("birthday");
  28. titles.add("gender");
  29. titles.add("date");
  30. List<Map<String, Object>> values = Lists.newArrayList();
  31. for (int i = 0; i < 10; i++) {
  32. Map<String, Object> map = Maps.newHashMap();
  33. map.put("id", i + 1D);
  34. map.put("name", "test_" + i);
  35. map.put("age", i * 1.5);
  36. map.put("gender", "man");
  37. map.put("birthday", new Date());
  38. map.put("date", Calendar.getInstance());
  39. values.add(map);
  40. }
  41. System.out.println(writerExcel(path, name, titles, values));
  42. }
  43.  
  44. /**
  45. * 数据写入Excel文件
  46. *
  47. * @param path 文件路径,包含文件全名,例如:D://file//demo.xls
  48. * @param name sheet名称
  49. * @param titles 行标题列
  50. * @param values 数据集合,key为标题,value为数据
  51. * @return True\False
  52. */
  53. public static boolean writerExcel(String path, String name, List<String> titles, List<Map<String, Object>> values) {
  54. LOGGER.info("path : {}", path);
  55. String style = path.substring(path.lastIndexOf("."), path.length()).toUpperCase(); // 从文件路径中获取文件的类型
  56. return generateWorkbook(path, name, style, titles, values);
  57. }
  58.  
  59. /**
  60. * 将数据写入指定path下的Excel文件中
  61. *
  62. * @param path 文件存储路径
  63. * @param name sheet名
  64. * @param style Excel类型
  65. * @param titles 标题串
  66. * @param values 内容集
  67. * @return True\False
  68. */
  69. private static boolean generateWorkbook(String path, String name, String style, List<String> titles, List<Map<String, Object>> values) {
  70. LOGGER.info("file style : {}", style);
  71. Workbook workbook;
  72. if ("XLS".equals(style.toUpperCase())) {
  73. workbook = new HSSFWorkbook();
  74. } else {
  75. workbook = new XSSFWorkbook();
  76. }
  77. // 生成一个表格
  78. Sheet sheet;
  79. if (null == name || "".equals(name)) {
  80. sheet = workbook.createSheet(); // name 为空则使用默认值
  81. } else {
  82. sheet = workbook.createSheet(name);
  83. }
  84. // 设置表格默认列宽度为15个字节
  85. sheet.setDefaultColumnWidth((short) 15);
  86. // 生成样式
  87. Map<String, CellStyle> styles = createStyles(workbook);
  88. /*
  89. * 创建标题行
  90. */
  91. Row row = sheet.createRow(0);
  92. // 存储标题在Excel文件中的序号
  93. Map<String, Integer> titleOrder = Maps.newHashMap();
  94. for (int i = 0; i < titles.size(); i++) {
  95. Cell cell = row.createCell(i);
  96. cell.setCellStyle(styles.get("header"));
  97. String title = titles.get(i);
  98. cell.setCellValue(title);
  99. titleOrder.put(title, i);
  100. }
  101. /*
  102. * 写入正文
  103. */
  104. Iterator<Map<String, Object>> iterator = values.iterator();
  105. int index = 0; // 行号
  106. while (iterator.hasNext()) {
  107. index++; // 出去标题行,从第一行开始写
  108. row = sheet.createRow(index);
  109. Map<String, Object> value = iterator.next();
  110. for (Map.Entry<String, Object> map : value.entrySet()) {
  111. // 获取列名
  112. String title = map.getKey();
  113. // 根据列名获取序号
  114. int i = titleOrder.get(title);
  115. // 在指定序号处创建cell
  116. Cell cell = row.createCell(i);
  117. // 设置cell的样式
  118. if (index % 2 == 1) {
  119. cell.setCellStyle(styles.get("cellA"));
  120. } else {
  121. cell.setCellStyle(styles.get("cellB"));
  122. }
  123. // 获取列的值
  124. Object object = map.getValue();
  125. // 判断object的类型
  126. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  127. if (object instanceof Double) {
  128. cell.setCellValue((Double) object);
  129. } else if (object instanceof Date) {
  130. String time = simpleDateFormat.format((Date) object);
  131. cell.setCellValue(time);
  132. } else if (object instanceof Calendar) {
  133. Calendar calendar = (Calendar) object;
  134. String time = simpleDateFormat.format(calendar.getTime());
  135. cell.setCellValue(time);
  136. } else if (object instanceof Boolean) {
  137. cell.setCellValue((Boolean) object);
  138. } else {
  139. cell.setCellValue(object.toString());
  140. }
  141. }
  142. }
  143. /*
  144. * 写入到文件中
  145. */
  146. boolean isCorrect = false;
  147. try {
  148. File file = new File(path);
  149. OutputStream outputStream = new FileOutputStream(file);
  150. workbook.write(outputStream);
  151. outputStream.close();
  152. isCorrect = true;
  153. } catch (IOException e) {
  154. isCorrect = false;
  155. LOGGER.error("write Excel file error : {}", e.getMessage());
  156. }
  157. try {
  158. workbook.close();
  159. } catch (IOException e) {
  160. isCorrect = false;
  161. LOGGER.error("workbook closed error : {}", e.getMessage());
  162. }
  163. return isCorrect;
  164. }
  165.  
  166. /**
  167. * Create a library of cell styles
  168. */
  169. /**
  170. * @param wb
  171. * @return
  172. */
  173. private static Map<String, CellStyle> createStyles(Workbook wb) {
  174. Map<String, CellStyle> styles = Maps.newHashMap();
  175.  
  176. // 标题样式
  177. CellStyle titleStyle = wb.createCellStyle();
  178. titleStyle.setAlignment(HorizontalAlignment.CENTER); // 水平对齐
  179. titleStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 垂直对齐
  180. titleStyle.setLocked(true); // 样式锁定
  181. titleStyle.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());
  182. Font titleFont = wb.createFont();
  183. titleFont.setFontHeightInPoints((short) 16);
  184. titleFont.setBold(true);
  185. titleFont.setFontName("微软雅黑");
  186. titleStyle.setFont(titleFont);
  187. styles.put("title", titleStyle);
  188.  
  189. // 文件头样式
  190. CellStyle headerStyle = wb.createCellStyle();
  191. headerStyle.setAlignment(HorizontalAlignment.CENTER);
  192. headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);
  193. headerStyle.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex()); // 前景色
  194. headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); // 颜色填充方式
  195. headerStyle.setWrapText(true);
  196. headerStyle.setBorderRight(BorderStyle.THIN); // 设置边界
  197. headerStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
  198. headerStyle.setBorderLeft(BorderStyle.THIN);
  199. headerStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
  200. headerStyle.setBorderTop(BorderStyle.THIN);
  201. headerStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
  202. headerStyle.setBorderBottom(BorderStyle.THIN);
  203. headerStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
  204. Font headerFont = wb.createFont();
  205. headerFont.setFontHeightInPoints((short) 12);
  206. headerFont.setColor(IndexedColors.WHITE.getIndex());
  207. titleFont.setFontName("微软雅黑");
  208. headerStyle.setFont(headerFont);
  209. styles.put("header", headerStyle);
  210.  
  211. Font cellStyleFont = wb.createFont();
  212. cellStyleFont.setFontHeightInPoints((short) 12);
  213. cellStyleFont.setColor(IndexedColors.BLUE_GREY.getIndex());
  214. cellStyleFont.setFontName("微软雅黑");
  215.  
  216. // 正文样式A
  217. CellStyle cellStyleA = wb.createCellStyle();
  218. cellStyleA.setAlignment(HorizontalAlignment.CENTER); // 居中设置
  219. cellStyleA.setVerticalAlignment(VerticalAlignment.CENTER);
  220. cellStyleA.setWrapText(true);
  221. cellStyleA.setBorderRight(BorderStyle.THIN);
  222. cellStyleA.setRightBorderColor(IndexedColors.BLACK.getIndex());
  223. cellStyleA.setBorderLeft(BorderStyle.THIN);
  224. cellStyleA.setLeftBorderColor(IndexedColors.BLACK.getIndex());
  225. cellStyleA.setBorderTop(BorderStyle.THIN);
  226. cellStyleA.setTopBorderColor(IndexedColors.BLACK.getIndex());
  227. cellStyleA.setBorderBottom(BorderStyle.THIN);
  228. cellStyleA.setBottomBorderColor(IndexedColors.BLACK.getIndex());
  229. cellStyleA.setFont(cellStyleFont);
  230. styles.put("cellA", cellStyleA);
  231.  
  232. // 正文样式B:添加前景色为浅黄色
  233. CellStyle cellStyleB = wb.createCellStyle();
  234. cellStyleB.setAlignment(HorizontalAlignment.CENTER);
  235. cellStyleB.setVerticalAlignment(VerticalAlignment.CENTER);
  236. cellStyleB.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.getIndex());
  237. cellStyleB.setFillPattern(FillPatternType.SOLID_FOREGROUND);
  238. cellStyleB.setWrapText(true);
  239. cellStyleB.setBorderRight(BorderStyle.THIN);
  240. cellStyleB.setRightBorderColor(IndexedColors.BLACK.getIndex());
  241. cellStyleB.setBorderLeft(BorderStyle.THIN);
  242. cellStyleB.setLeftBorderColor(IndexedColors.BLACK.getIndex());
  243. cellStyleB.setBorderTop(BorderStyle.THIN);
  244. cellStyleB.setTopBorderColor(IndexedColors.BLACK.getIndex());
  245. cellStyleB.setBorderBottom(BorderStyle.THIN);
  246. cellStyleB.setBottomBorderColor(IndexedColors.BLACK.getIndex());
  247. cellStyleB.setFont(cellStyleFont);
  248. styles.put("cellB", cellStyleB);
  249.  
  250. return styles;
  251. }
  252. }

数据导出 写入到excle文件的更多相关文章

  1. 将页面中表格数据导出excel格式的文件(vue)

    近期由于项目需要,需要将页面中的表格数据导出excel格式的文件,折腾了许久,在网上各种百度,虽然资料不少,但是大都不全,踩了许多坑,总算是皇天不负有心人,最后圆满解决了. 1.安装相关依赖(npm安 ...

  2. SQL Server将数据导出到SQL脚本文件

    http://www.studyofnet.com/news/list-8883.2-1-4.html 一.SQL Server 2008将数据导出到SQL脚本文件 1.打开SQL Server200 ...

  3. MongoDB中的数据导出为excel CSV 文件

    1.打开命令行,进入我们所安装的mongodb路径下的bin文件夹 2.我们采用bin文件夹下的mongoexport方法进行导出, mongoexport -d myDB -c user -f _i ...

  4. c# .Net :Excel NPOI导入导出操作教程之数据库表信息数据导出到一个Excel文件并写到磁盘示例分享

      string sql = @"select * from T_Excel"; ----------------DataTable Star----------------    ...

  5. Python3 Pandas的DataFrame格式数据写入excle文件、json、html、剪贴板、数据库

    Python3 Pandas的DataFrame格式数据写入excle文件.json.html.剪贴板.数据库 一.DataFrame格式数据 Pandas是Python下一个开源数据分析的库,它提供 ...

  6. 使用Sql Server Management Studio 2008将数据导出到Sql文件中

      最近需要将一个Sql Server 2005数据库中的数据导出,为了方便,就希望能导出成Sql文件,里面包含的数据是由Insert 语句组成的. 在Sql Server Management St ...

  7. python学习笔记3.2_数据导出

    一.data.to_csv:数据导出 1.to_csv:将数据导出为逗号分隔的文件 2.输出为其他分隔符的文件 写入到控制台,并打印:sys.stdout na_rep:对空值进行标注 二.serie ...

  8. SpringMVC 实现POI读取Excle文件中数据导入数据库(上传)、导出数据库中数据到Excle文件中(下载)

    读取Excale表返回一个集合: package com.shiliu.game.utils; import java.io.File; import java.io.FileInputStream; ...

  9. 数据导出至excle

    ASP.NET MVC导出Excel 首先下载  NPOI.dll 引用到项目中 建议下载地址:http://download.csdn.net/detail/pukuimin1226/5851747 ...

随机推荐

  1. Web学习之CSS总结

    银角大王武Sir的博客地址 1.positoin属性固定元素的定位类型 说明:这个属性定义建立元素布局所用的定位机制.任何元素都可以定位,不过绝对或固定元素会生成一个块级框,而无论该元素是什么类型.相 ...

  2. JSP学习(5)

    JSP学习(5) 保存用户状态的两大机制 session对象 Cookie Cookie简介 是Web服务器保存在客户端的一系列文本信息 典型应用 判断注册用户是否已经登录 购物车处理 作用 对特定对 ...

  3. spring requestbody json

    1  @requestbody string param 前台将jsonobject序列化成字符串 后台解析成JsonObject 2 @requestbody map<string,objec ...

  4. 【vue】vue不足 待补强

    83719279 9:56:03尤其是路由 声明周期 父子通信 组件通信 以及钩子函数83719279 9:56:17这些我都不敢用,只能用最原始的方法83719279 9:56:32还有es6 js ...

  5. Graph Neural Networks for Computer Vision

    Graph Neural Networks for Computer Vision I was attracted by this image: This is an inspiring image ...

  6. 重置Jenkins的构建历史

    1.重置单个JOB的构建历史item = Jenkins.instance.getItemByFullName("your-job-name-here") //THIS WILL ...

  7. EditText控件常用属性

    常用属性 android:id——控件ID android:layout_width——控件宽度 android:layout_height——控件高度 android:text——文本内容 andr ...

  8. Python3解leetcode Reach a Number

    问题描述: You are standing at position 0 on an infinite number line. There is a goal at position target. ...

  9. BZOJ 4836: [Lydsy1704月赛]二元运算 分治FFT

    Code: #include<bits/stdc++.h> #define ll long long #define maxn 500000 #define setIO(s) freope ...

  10. USACO 2006 November Gold Corn Fields

    USACO 2006 November Gold Corn Fields 题目描述: Farmer John has purchased a lush new rectangular pasture ...