zoukankan      html  css  js  c++  java
  • java excel POI

    Jakarta POI 是一套用于访问微软格式文档的Java API。 

    Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于早在Word的HWPF,在各种组件中目前只有用于操作Excel的HSSF相对成熟。它的官方首页是:http://jakarta.apache.org/poi/hssf/index.html,这里可以下载到它的最新版本和文档。 

    下面就来看看如何通过Jakarta POI的HSSF操作Excel文件。 

    操作Excel文件的步骤同JXL类似(关于如何用JXL操作Excel可以看我的另外两篇文章)。 

    HSSF对Excel的操作主要是通过下面几个对象实现: 
    HSSFWorkbook    工作簿对象对应于Excel文件 
    HSSFSheet       Sheet对象对应于Excel中的Sheet 
    HSSFRow         行对象表示Sheet中的一行(这个对象在JXL中并没有提供) 
    HSSFCell        单元格对象 

    操作步骤就是用HSSFWorkbook打开或者创建“Excel文件对象”,用HSSFWorkbook对象返回或者创建Sheet对象,用Sheet对象返回行对象,用行对象得到Cell对象,有了Cell对象就随你读写了。下面来看一个动态生成Excel文件的例子: 

    //创建HSSFWorkbook对象 
    HSSFWorkbook wb = new HSSFWorkbook(); 
    //创建HSSFSheet对象 
    HSSFSheet sheet = wb.createSheet("sheet0"); 
    //创建HSSFRow对象 
    HSSFRow row = sheet.createRow((short)0); 
    //创建HSSFCell对象 
    HSSFCell cell=row.createCell((short)0); 
    //用来处理中文问题 
    cell.setEncoding(HSSFCell.ENCODING_UTF_16); 
    //设置单元格的值 
    cell.setCellValue("单元格中的中文"); 
    //定义你需要的输出流 
    OutputStream out = new FileOutputStream("viwo.xls"); 
    //输出Excel 
    wb.write(out); 
    out.flush(); 

    HSSF读取文件同样还是使用这几个对象,只是把相应的createXXX方法变成了getXXX方法即可。 
    只要理解了其中原理,不管是读还是写亦或是特定格式都可以轻松实现,正所谓知其然更要知其所以然。 

    最后附上HSSF官方的QuickGuide:《Busy Developers' Guide to HSSF Features》,虽然是英文的但还是很容易理解的。 
    http://jakarta.apache.org/poi/hssf/quick-guide.html 


    一、示例1: 

    Java代码  收藏代码
    1. package com.cplatform.contants;  
    2.   
    3. import java.io.FileOutputStream;     
    4. import java.io.IOException;     
    5. import java.util.Date;     
    6.   
    7. import org.apache.poi.hssf.usermodel.HSSFCell;     
    8. import org.apache.poi.hssf.usermodel.HSSFCellStyle;     
    9. import org.apache.poi.hssf.usermodel.HSSFDataFormat;     
    10. import org.apache.poi.hssf.usermodel.HSSFRow;     
    11. import org.apache.poi.hssf.usermodel.HSSFSheet;     
    12. import org.apache.poi.hssf.usermodel.HSSFWorkbook;     
    13. import org.apache.poi.hssf.util.HSSFColor;     
    14.   
    15. public class A {     
    16.     /**  
    17.      * HSSFWorkbook excell的文档对象 HSSFSheet excell的表单 HSSFRow excell的行 HSSFCell  
    18.      * excell的格子单元 HSSFFont excell字体 HSSFName 名称 HSSFDataFormat 日期格式 HSSFHeader  
    19.      * sheet头 HSSFFooter sheet尾 HSSFCellStyle cell样式  
    20.      */   
    21.     public static void main(String[] args) throws IOException {     
    22.         HSSFWorkbook wb = new HSSFWorkbook();     
    23.         // 建立新HSSFWorkbook对象     
    24.         HSSFSheet sheet = wb.createSheet("new sheet");     
    25.         // 建立新的sheet对象     
    26.         // Create a row and put some cells in it.Rows are 0 based.     
    27.         HSSFRow row = sheet.createRow((short) 0);     
    28.         // 建立新行     
    29.         // Create a cell and put a value in it.     
    30.         HSSFCell cell = row.createCell((short) 0);     
    31.         // 建立新cell     
    32.         cell.setCellValue(1);// 设置cell的整数类型的值     
    33.         // Or do it on one line.     
    34.         row.createCell((short) 1).setCellValue(1.2);     
    35.         // 设置cell浮点类型的值     
    36.         row.createCell((short) 2).setCellValue("test");     
    37.         // 设置cell字符类型的值     
    38.         row.createCell((short) 3).setCellValue(true);     
    39.         // 设置cell布尔类型的值     
    40.         HSSFCellStyle cellStyle = wb.createCellStyle();     
    41.         // 建立新的cell样式     
    42.         cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));     
    43.         // 设置cell样式为定制的日期格式     
    44.         HSSFCell dCell = row.createCell((short) 4);     
    45.         dCell.setCellValue(new Date());     
    46.         // 设置cell为日期类型的值     
    47.         dCell.setCellStyle(cellStyle);     
    48.         // 设置该cell日期的显示格式     
    49.         HSSFCell csCell = row.createCell((short) 5);     
    50.         csCell.setEncoding(HSSFCell.ENCODING_UTF_16);     
    51.         // 设置cell编码解决中文高位字节截断     
    52.         csCell.setCellValue("中文测试_Chinese Words Test");     
    53.   
    54.         // 设置背景色     
    55.         HSSFCellStyle style = wb.createCellStyle();     
    56.         style     
    57.                 .setFillForegroundColor(new HSSFColor.GREY_25_PERCENT()     
    58.                         .getIndex());     
    59.         style     
    60.                 .setFillBackgroundColor(new HSSFColor.GREY_25_PERCENT()     
    61.                         .getIndex());     
    62.         style.setFillPattern(HSSFCellStyle.SPARSE_DOTS);     
    63.         HSSFCell cell1 = row.createCell((short) 6);     
    64.         cell1.setCellValue("X");     
    65.         cell1.setCellStyle(style);     
    66.   
    67.         // 设置背景色     
    68.         HSSFCellStyle style1 = wb.createCellStyle();     
    69.         style1.setFillForegroundColor(new HSSFColor.GREY_40_PERCENT()     
    70.                 .getIndex());     
    71.         style1.setFillBackgroundColor(new HSSFColor.GREY_40_PERCENT()     
    72.                 .getIndex());     
    73.         style1.setBorderBottom((short) 1);     
    74.         style1.setBorderTop((short) 1);     
    75.         style1.setBorderLeft((short) 1);     
    76.         style1.setBorderRight((short) 1);     
    77.         /**  
    78.          * 注意这句代码, style1.setFillPattern, 如果你在你的程序中不设置fill pattern,那么  
    79.          * 你上面设置的前景色和背景色就显示不出来. 
    80.          */   
    81.         style1.setFillPattern(HSSFCellStyle.SPARSE_DOTS);     
    82.         HSSFCell cell11 = row.createCell((short) 7);     
    83.         cell11.setCellValue("X11");     
    84.         cell11.setCellStyle(style1);     
    85.   
    86.         // 数字格式化     
    87.         HSSFCellStyle st = wb.createCellStyle();     
    88.         // 建立新的cell样式     
    89.         st.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0"));     
    90.         HSSFCell cell12 = row.createCell((short) 8);     
    91.         cell12.setCellValue((double) 10000000);     
    92.         cell12.setCellStyle(st);    
    93.   
    94. cell12 .setEncoding(HSSFCell.ENCODING_UTF_16);//设置cell编码解决中文高位字节截断  
    95.   
    96. cell12 .setCellValue("中文测试_Chinese Words Test");//设置中西文结合字符串  
    97.   
    98.         row.createCell((short) 9).setCellType(HSSFCell.CELL_TYPE_ERROR);     
    99.         // 建立错误cell     
    100.         // Write the output to a file     
    101.         FileOutputStream fileOut = new FileOutputStream("D:/workbook.xls");     
    102.         wb.write(fileOut);     
    103.         fileOut.close();     
    104.     }     
    105. }  
    106.   
    107. 二、示例2:  
    108.   
    109. package com.cplatform.contants;  
    110.   
    111. import java.io.FileNotFoundException;  
    112. import java.io.FileOutputStream;  
    113. import java.io.IOException;  
    114. import java.util.Calendar;  
    115.   
    116. import org.apache.poi.hssf.usermodel.HSSFCell;  
    117. import org.apache.poi.hssf.usermodel.HSSFCellStyle;  
    118. import org.apache.poi.hssf.usermodel.HSSFDataFormat;  
    119. import org.apache.poi.hssf.usermodel.HSSFRow;  
    120. import org.apache.poi.hssf.usermodel.HSSFSheet;  
    121. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
    122.   
    123. /** */  
    124. /** 
    125. * 生成导出Excel文件对象 
    126. *  
    127. * @author John.Zhu 
    128. */  
    129. public class XLSExport {  
    130.   
    131. // 设置cell编码解决中文高位字节截断  
    132. private static short XLS_ENCODING = HSSFWorkbook.ENCODING_UTF_16;  
    133.   
    134. // 定制日期格式  
    135. private static String DATE_FORMAT = " m/d/yy "; // "m/d/yy h:mm"  
    136.   
    137. // 定制浮点数格式  
    138. private static String NUMBER_FORMAT = " #,##0.00 ";  
    139.   
    140. private String xlsFileName;  
    141.   
    142. private HSSFWorkbook workbook;  
    143.   
    144. private HSSFSheet sheet;  
    145.   
    146. private HSSFRow row;  
    147.   
    148. /** */  
    149. /** 
    150. * 初始化Excel 
    151. *  
    152. * @param fileName 
    153. *            导出文件名 
    154. */  
    155. public XLSExport(String fileName) {  
    156.    this.xlsFileName = fileName;  
    157.    this.workbook = new HSSFWorkbook();  
    158.    this.sheet = workbook.createSheet();  
    159. }  
    160.   
    161. /** */  
    162. /** 
    163. * 导出Excel文件 
    164. *  
    165. * @throws XLSException 
    166. */  
    167. public void exportXLS() throws Exception {  
    168.    try {  
    169.     FileOutputStream fOut = new FileOutputStream(xlsFileName);  
    170.     workbook.write(fOut);  
    171.     fOut.flush();  
    172.     fOut.close();  
    173.    }  
    174.    catch (FileNotFoundException e) {  
    175.     throw new Exception(" 生成导出Excel文件出错! ", e);  
    176.    }  
    177.    catch (IOException e) {  
    178.     throw new Exception(" 写入Excel文件出错! ", e);  
    179.    }  
    180.   
    181. }  
    182.   
    183. /** */  
    184. /** 
    185. * 增加一行 
    186. *  
    187. * @param index 
    188. *            行号 
    189. */  
    190. public void createRow(int index) {  
    191.    this.row = this.sheet.createRow(index);  
    192. }  
    193.   
    194. /** */  
    195. /** 
    196. * 设置单元格 
    197. *  
    198. * @param index 
    199. *            列号 
    200. * @param value 
    201. *            单元格填充值 
    202. */  
    203. public void setCell(int index, String value) {  
    204.    HSSFCell cell = this.row.createCell((short) index);  
    205.    cell.setCellType(HSSFCell.CELL_TYPE_STRING);  
    206.    cell.setEncoding(XLS_ENCODING);  
    207.    cell.setCellValue(value);  
    208. }  
    209.   
    210. /** */  
    211. /** 
    212. * 设置单元格 
    213. *  
    214. * @param index 
    215. *            列号 
    216. * @param value 
    217. *            单元格填充值 
    218. */  
    219. public void setCell(int index, Calendar value) {  
    220.    HSSFCell cell = this.row.createCell((short) index);  
    221.    cell.setEncoding(XLS_ENCODING);  
    222.    cell.setCellValue(value.getTime());  
    223.    HSSFCellStyle cellStyle = workbook.createCellStyle(); // 建立新的cell样式  
    224.    cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat(DATE_FORMAT)); // 设置cell样式为定制的日期格式  
    225.    cell.setCellStyle(cellStyle); // 设置该cell日期的显示格式  
    226. }  
    227.   
    228. /** */  
    229. /** 
    230. * 设置单元格 
    231. *  
    232. * @param index 
    233. *            列号 
    234. * @param value 
    235. *            单元格填充值 
    236. */  
    237. public void setCell(int index, int value) {  
    238.    HSSFCell cell = this.row.createCell((short) index);  
    239.    cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);  
    240.    cell.setCellValue(value);  
    241. }  
    242.   
    243. /** */  
    244. /** 
    245. * 设置单元格 
    246. *  
    247. * @param index 
    248. *            列号 
    249. * @param value 
    250. *            单元格填充值 
    251. */  
    252. public void setCell(int index, double value) {  
    253.    HSSFCell cell = this.row.createCell((short) index);  
    254.    cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);  
    255.    cell.setCellValue(value);  
    256.    HSSFCellStyle cellStyle = workbook.createCellStyle(); // 建立新的cell样式  
    257.    HSSFDataFormat format = workbook.createDataFormat();  
    258.    cellStyle.setDataFormat(format.getFormat(NUMBER_FORMAT)); // 设置cell样式为定制的浮点数格式  
    259.    cell.setCellStyle(cellStyle); // 设置该cell浮点数的显示格式  
    260. }  
    261.   
    262. public static void main(String[] args) {  
    263.    System.out.println(" 开始导出Excel文件 ");  
    264.    XLSExport e = new XLSExport("d:/test.xls");  
    265.    e.createRow(0);  
    266.    e.setCell(0, " 编号 ");  
    267.    e.setCell(1, " 名称 ");  
    268.    e.setCell(2, " 日期 ");  
    269.    e.setCell(3, " 金额 ");  
    270.    e.createRow(1);  
    271.    e.setCell(0, 1);  
    272.    e.setCell(1, " 工商银行 ");  
    273.    e.setCell(2, Calendar.getInstance());  
    274.    e.setCell(3, 111123.99);  
    275.    e.createRow(2);  
    276.    e.setCell(0, 2);  
    277.    e.setCell(1, " 招商银行 ");  
    278.    e.setCell(2, Calendar.getInstance());  
    279.    e.setCell(3, 222456.88);  
    280.    try {  
    281.     e.exportXLS();  
    282.     System.out.println(" 导出Excel文件[成功] ");  
    283.    }  
    284.    catch (Exception e1) {  
    285.     System.out.println(" 导出Excel文件[失败] ");  
    286.     e1.printStackTrace();  
    287.    }  
    288. }  
    289.   
    290. }   



  • 相关阅读:
    【CF1416D】Graph and Queries(虚点)
    【CF1120D】Power Tree(建图,差分,最小生成树)
    AtCoder Regular Contest 121
    [2021.5] 我要交作业!
    [校内训练2021_03_03]C
    [校内训练2021_03_02]C
    [经验与教训2021_03_01-2021_03_05]
    [校内训练2021_02_24]B,代数数的和仍然是代数数
    [校内训练2021_02_25]C
    [经验与教训2021_02_19-2021_02_26]
  • 原文地址:https://www.cnblogs.com/lizhang4/p/7687143.html
Copyright © 2011-2022 走看看