• java操作excel文件


    java操作excel文件,有两种工具可以使用,一种是jxl,一种是poi。最近做的需求,使用到poi,因此本文介绍poi的使用(目前只介绍写excel文件)。

     

    一、简介

          Jakarta POI 是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API

    目前比较成熟的是HSSF接口,处理MS Excel对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。 poi中,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。

    HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。前者很好理解,后者比较抽象,但操作效率要高得多。

     

    二、使用HSSF API创建excel文档

    1、HSSF的几个实体类

    HSSFWorkBook  : 整个excel文件

    HSSFSheet :工作表

    HSSFRow : 行

    HSSFCell : 单元格

    HSSFCellStyle : 单元格样式

    HSSFFont :单元格字体

    HSSFDataFormat : 单元格内容格式化

    HSSFRichTextString : 单元格文本内容

    还有其他一些实体,这里不一一列举

     

    2、HSSFWorkBook

    WorkBook是通过new HSSFWorkBook实例来创建。

    HSSFWorkbook workBook = new HSSFWorkbook();  

    3、HSSFSheet
    Sheet通过HSSFWorkBook实例的createSheet()函数来创建。
    HSSFSheet sheet = workBook.createSheet();
    新创建的多个sheet自动按照顺序添加到WorkBook。
    Sheet创建的时候并没有指定名字(底部tab显示的名称),可以调用HSSFWorkbook的setSheetName函数来手工设置。如
    workBook.setSheetName(sheetindex,"SheetName");
    参数sheetindex
          从0开始

    4、HSSFRow
    Row是通过HSSFSheet实例的createRow(rowNumber)函数创建的。
    参数rowNumber从0开始。
    HSSFRow row = sheet.createRow(0);
    可以调用setHeight(height)函数设置Row的高度;
    其中height单位为twip,即1/20个point。
    高度也可以通过setHeightInPoints函数来设置。

    5、HSSFCell
    Cell通过HSSFRow实例的createCell(column)或createCell(column, type)函数来创建。
    Cell的type
    HSSFCell.CELL_TYPE_NUMERIC

    HSSFCell.CELL_TYPE_STRING

    HSSFCell.CELL_TYPE_FORMULA

    HSSFCell.CELL_TYPE_BLANK   默认值

    HSSFCell.CELL_TYPE_BOOLEAN

    Cell的值
          调用setCellValue(para)函数来设置。Para参数是HSSFRichTextString、double、Date、Calander。
          单个Cell没有width值,必须HSSFSheet实例的setColumnWidth(colindex, width)函数来设置,单位是1/256个character。例如,如果第一列单元格宽度设置为8个字符宽度,则使用:sheet.setColumnWidth(0, 8*256);

          另外,HSSFSheet提供了autoSizeColumn(short column)方法,来根据单元格内容,自动调整列的宽度。该方法效率很低,不推荐使用(特别是数据量很大的时候)

    6、HSSFFont

    HSSFFont是通过HSSFWorkbook实例的createFont()方法创建的,即:

    HSSFFont font = workBook.createFont();

    font.setFontHeightInPoints((short) 11); // 字体大小
    font.setFontName("宋体");

    7、HSSFDataFormat

    HSSFDataFormat,用来设置单元格的格式,例如数字、日期格式。通过HSSFWorkbook实例的createDataFormat()方法来创建对象,即:

    HSSFDataFormat dataFormat = workBook.createDataFormat();

    创建之后,使用style进行设置,即:

    style.setDataFormat(dataFormat.getFormat("yyyy-mm-dd hh:mm:ss"));

    8、HSSFCellStyle
    HSSFCellStyle实例是通过HSSFWorkbook实例的createCellStyle()方法来创建的,即:

    HSSFCellStyle style = workBook.createCellStyle();

    style.setFont(font);
    style.setAlignment(HSSFCellStyle.ALIGN_LEFT);
    style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); 
    style.setWrapText(false); // 是否换行

    style.setDataFormat(dataFormat.getFormat("yyyy-mm-dd hh:mm:ss"));

     

    9、例子

    [java]  view plain copy
    1. import java.io.BufferedOutputStream;  
    2. import java.io.FileOutputStream;  
    3. import java.io.IOException;  
    4. import java.util.Date;  
    5.   
    6. import org.apache.poi.hssf.usermodel.HSSFCell;  
    7. import org.apache.poi.hssf.usermodel.HSSFCellStyle;  
    8. import org.apache.poi.hssf.usermodel.HSSFDataFormat;  
    9. import org.apache.poi.hssf.usermodel.HSSFFont;  
    10. import org.apache.poi.hssf.usermodel.HSSFRichTextString;  
    11. import org.apache.poi.hssf.usermodel.HSSFRow;  
    12. import org.apache.poi.hssf.usermodel.HSSFSheet;  
    13. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
    14.   
    15. public class WriteExcel {  
    16.     private static final String DATE_FORMAT = "yyyy-mm-dd hh:mm:ss";  
    17.     private static final String MONEY_FORMAT = "###,##0.00";  
    18.       
    19.     public static void main(String[] args) throws IOException {  
    20.         export();  
    21.     }  
    22.       
    23.     public static HSSFCellStyle createCellStyle(HSSFWorkbook workBook, HSSFFont font, short align) {  
    24.         HSSFCellStyle style = workBook.createCellStyle();  
    25.         style.setFont(font);  
    26.         style.setAlignment(align);  
    27.         style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);  
    28.         return style;  
    29.     }  
    30.       
    31.     public static HSSFCellStyle createWrapCellStyle(HSSFWorkbook workBook, HSSFFont font, short align, boolean wrapped) {  
    32.         HSSFCellStyle style = workBook.createCellStyle();  
    33.         style.setFont(font);  
    34.         style.setAlignment(align);  
    35.         style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);  
    36.         style.setWrapText(wrapped);  
    37.         return style;  
    38.     }  
    39.       
    40.     public static HSSFCellStyle createFormatCellStyle(HSSFWorkbook workBook, HSSFFont font, short align, HSSFDataFormat dataFormat, String format) {  
    41.         HSSFCellStyle style = workBook.createCellStyle();  
    42.         style.setFont(font);  
    43.         style.setAlignment(align);  
    44.         style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);  
    45.         style.setDataFormat(dataFormat.getFormat(format));  
    46.         return style;  
    47.     }  
    48.       
    49.     public static void createStringCell(HSSFRow row, short column, HSSFCellStyle cellStyle, String value) {  
    50.         HSSFCell cell = row.createCell(column);  
    51.         cell.setCellStyle(cellStyle);  
    52.         cell.setCellValue(new HSSFRichTextString(value));  
    53.     }  
    54.       
    55.     public static void createNumberCell(HSSFRow row, short column, HSSFCellStyle cellStyle, double value) {  
    56.         HSSFCell cell = row.createCell(column);  
    57.         cell.setCellStyle(cellStyle);  
    58.         cell.setCellValue(value);  
    59.     }  
    60.       
    61.     public static void createDateCell(HSSFRow row, short column, HSSFCellStyle cellStyle, Date value) {  
    62.         HSSFCell cell = row.createCell(column);  
    63.         cell.setCellStyle(cellStyle);  
    64.         cell.setCellValue(value);  
    65.     }  
    66.       
    67.     public static void export() throws IOException {  
    68.         HSSFWorkbook workBook = new HSSFWorkbook();  
    69.         HSSFSheet sheet = workBook.createSheet();  
    70.         workBook.setSheetName(0"sheet1");  
    71.           
    72.         // 字体  
    73.         HSSFFont titleFont = workBook.createFont();  
    74.         titleFont.setFontHeightInPoints((short11);  
    75.         titleFont.setFontName("宋体");  
    76.         HSSFDataFormat dataFormat = workBook.createDataFormat();  
    77.           
    78.         // 单元格样式  
    79.         HSSFCellStyle leftStyle = createCellStyle(workBook, titleFont, HSSFCellStyle.ALIGN_LEFT);  
    80.         HSSFCellStyle rightStyle = createCellStyle(workBook, titleFont, HSSFCellStyle.ALIGN_RIGHT);  
    81.         HSSFCellStyle wrapStyle = createWrapCellStyle(workBook, titleFont, HSSFCellStyle.ALIGN_LEFT, true);  
    82.         HSSFCellStyle dateStyle = createFormatCellStyle(workBook, titleFont, HSSFCellStyle.ALIGN_RIGHT, dataFormat, DATE_FORMAT);  
    83.         HSSFCellStyle moneyStyle = createFormatCellStyle(workBook, titleFont, HSSFCellStyle.ALIGN_RIGHT, dataFormat, MONEY_FORMAT);  
    84.           
    85.         int rowIndex = 0;  
    86.   
    87.         // excel标题行  
    88.         HSSFRow row = sheet.createRow(rowIndex);  
    89.         short index = (short0;  
    90.         for (int i = 0; i < 6; i ++) {  
    91.             createStringCell(row, index, leftStyle, "列标题" + i);  
    92.             sheet.setColumnWidth(index, (short) (20 * 256)); // 20个字符的宽度  
    93.             index++;  
    94.         }  
    95.   
    96.         // 内容  
    97.         for (int i = 0; i < 10; i++) {  
    98.             row = sheet.createRow(++rowIndex);  
    99.             createStringCell(row, (short0, leftStyle, "26688135");  
    100.             createStringCell(row, (short1, wrapStyle, "这是简介");  
    101.             createNumberCell(row, (short2, moneyStyle, 100.05);  
    102.             createDateCell(row, (short3, dateStyle, new Date());  
    103.             createStringCell(row, (short4, wrapStyle, "第一行内容 /r/n第二行内容/r/n第三行内容"); // 使用/r/n,强制换行  
    104.             createNumberCell(row, (short5, rightStyle, 100);  
    105.         }  
    106.           
    107.         // 输出  
    108.         BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("abc.xls"));  
    109.         workBook.write(bos);  
    110.         bos.close();  
    111.     }  
    112. }  
  • 相关阅读:
    appium自动化测试(4)部分方法&unitest初步使用
    appium自动化测试(2)-工具(monitor、uiautomatorviewer)
    Appium自动化测试(1)-安装&环境
    echarts 地图 免费离线js,json包分享
    css动画Demo---水波动画和边框动画
    canvas绘制折线图(仿echarts)
    可编辑div中包含子元素时获取光标位置不准确的问题
    脚印
    从原理到代码之线性模型
    【ocelot】ocelot使用swagger
  • 原文地址:https://www.cnblogs.com/silentmuh/p/16723813.html
Copyright © 2020-2023  润新知