POI Excel

x33g5p2x  于2021-12-28 转载在 其他  
字(2.6k)|赞(0)|评价(0)|浏览(353)

1. Excel

POI提供了对Excel文件的读写,HSSF和XSSF提供创建,修改,读取和写入电子表格的方式

HSSF  - 读写Excel '97(-2007)(.xls)文件格式
XSSF  - 读写Excel 2007 OOXML(.xlsx)文件格式
SXSSF - XSSF的API兼容流扩展,用于生成大型电子表格,堆空间有限,实现低内存占用

org.apache.poi.ss.SpreadsheetVersion

2. HSSF用户模式类图

以HSSF为例

3. 工作簿Workbook

Workbook是创建或维护Excel工作簿的所有类的超接口。它属于org.apache.poi.ss.usermodel包

  1. HSSFWorkbook - 读写.xls格式的Excel
  2. XSSFWorkbook - 读写.xlsx格式的Excel

4. 工作表Sheet

工作表Sheet是工作簿Workbook的中心结构,一个工作簿最少 有一个工作表Sheet

  1. HSSFSheet - Excel 2003及以下版本
  2. XSSFSheet - Excel 2007及以上版本

3. 工作簿类结构

以HSSFWorkbook为例:

4. 合法sheet名

工作表Sheet名是有限制条件的:

5. Sheet名不能超过31个字符 
 6. 不得包含任何以下任何字符:
     - 0x0000      - 0x0003      - 冒号(:)      - 反斜杠(\)      - 星号(*)      - 问号(?)      - 正斜杠(/)      - 方括号([])

POI提供了创建合法Sheet名的方法:

org.apache.poi.ss.util.WorkbookUtil#createSafeSheetName(final String nameProposal)

5. 创建Sheet步骤

1. 创建输出流OutputStream 
 2. 创建工作簿Workbook 
 3. 创建工作表Sheet 
 4. 创建行Row 
 5. 创建单元格Cell 
 6. 设置单元格值
 7. 工作簿写入输出流 
 8. 关闭输出流

6. 创建Sheet实例

package hssf.sheet.sheet;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.RichTextString;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.WorkbookUtil;

import util.ExcelUtil;

public class ExportSheet {

    public static void main(String[] args) throws Exception {
        File file = new File("C:\\Users\\Administrator\\Desktop\\test.xls");
        if (file.exists()) {
            file.delete();
        }
        BufferedOutputStream out = null;
        try {
            out = new BufferedOutputStream(new FileOutputStream("C:\\Users\\Administrator\\Desktop\\test.xls"));
            exportExcel(out);
        } finally {
            out.close();
        }
    }

    private static void exportExcel(BufferedOutputStream out) throws Exception {
        // Step 1 : 创建工作簿Workbook
        Workbook workbook = new HSSFWorkbook();
// Workbook workbook = new XSSFWorkbook();
        String safeSheetName = WorkbookUtil.createSafeSheetName("合法工作表");
        // Step 2 : 创建工作表Sheet
        Sheet sheet = workbook.createSheet(safeSheetName);

        // 设置列宽
        setColWidth (sheet);

        Row row = null;
        Cell cell = null;
        for (int rowIndex = 0; rowIndex < 10; rowIndex++) {
            // Step 3 : 创建行Row
            row = sheet.createRow(rowIndex);
            row.setHeightInPoints(30);
            for (short colIndex = 0; colIndex < 10; colIndex++) {
                // Step 4 : 创建单元格Cell
                cell = row.createCell(colIndex);
                RichTextString text = new HSSFRichTextString(ExcelUtil.convertNum2CellId(rowIndex, colIndex));
                // Step 5 : 设置单元格内容
                cell.setCellValue(text);
            }
        }
        workbook.write(out);
    }

    /** * 设置列宽 * */
    private static void setColWidth(Sheet sheet) {
        // 默认行高列宽
        sheet.setDefaultRowHeight((short)(20*20));
        sheet.setDefaultColumnWidth(4);
        for (int colIndex = 0; colIndex < 10; colIndex++) {
            sheet.setColumnWidth(colIndex, 12*256);
        }
    }
}

7. 其他实例

http://www.cnblogs.com/LiZhiW/p/4313789.html

相关文章