Java 操作excel

Apache Poi

HSSF(xls) XSSF(xlsx) 和 SXSSF

  • HSSF: POI 对 03版本以及之前excel(.xls结尾)文件的Java操作实现类 .xls格式单个工作表最多支持65536行,256列。
  • XSSF: POI对07版本以及之后excel(.xlsx结尾)文件的Java操作实现类 .xlsx格式最多支持1048576行,16384列。
  • SXSSF: POI对XSSF操作的扩展类,大量文件操作速度更快。
创建Workbook(工作表)和Sheet
  • HSSF:
Workbook wb = new HSSFWorkbook();
Sheet sheet1 = wb.createSheet("new sheet");
  • XSSF:
Workbook wb = new XSSFWorkbook();
Sheet sheet1 = wb.createSheet("second sheet");

注意:
1. 工作表名称不得超过31个字符
2. 不得包含{ 0x0000,0x0003,: ,\ ,/,?,* ,[ ,] }中任何一个字符

创建单元格
// 创建一个工作表
Workbook wb = new XSSFWorkbook();

//创建一个sheet
Sheet sheet = wb.createSheet("new sheet");

//创建一个行 0 表示第1行
Row row = sheet.createRow(0);

//创建一个单元格
Cell cell = row.createCell(0);

//写入单元格
cell.setCellValue("Hello World !");
单元格接收的格式
  • 字符型: setCellValue(String s)
  • 浮点型: setCellValue(double d)
  • 布尔型: setCellValue(boolean b)
  • 日期型Date: setCellValue(Date date)
  • 富文本: setCellValue(RichTextString rt)
  • 日历型Calendar: setCellValue(Calendar calendar)
  • 本地日期型: setCellValue(LocalDateTime localDateTime)
  • 日期型LocalDate: set日期型LocalDateCellValue(LocalDate value)

代码如下:

Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet("new sheet");
Row row = sheet.createRow(2);

row.createCell(0).setCellValue(1.1);					//double
row.createCell(1).setCellValue(new Date()); 				//Date
row.createCell(2).setCellValue(Calendar.getInstance());			//Calendar
row.createCell(3).setCellValue("a string");				//String
row.createCell(4).setCellValue(true);					//boolean
row.createCell(5).setCellType(CellType.ERROR);

创建 Excel

Workbook wb = new XSSFWorkbook();

/*
	创建sheet  row  cell  并写入数据......
*/

String fileName = "test.xlsx";

OutputStream file = new FileOutputStream(fileName)
wb.write(file);
file.close();

读取Excel

//获取文件输入流
InputStream inputStream = new FileInputStream("/Users/Shared/区域数据.xls");

//获取Excel工作簿对象
HSSFWorkbook workbook = new HSSFWorkbook(inputStream);

 //获取sheet
HSSFSheet sheetAt = workbook.getSheetAt(0);

for (Row row : sheet) {

            if (row.getRowNum() == 0) {
                continue;
            }
            //读取当前行中单元格数据,索引从0开始
            String areaNum = row.getCell(0).getStringCellValue();
            String province = row.getCell(1).getStringCellValue();
            String city = row.getCell(2).getStringCellValue();
            String district = row.getCell(3).getStringCellValue();
            String postcode = row.getCell(4).getStringCellValue();
} 

//关闭流
workbook.close();

 

单元格类型判断

switch (cell.getCellType()) {
      case HSSFCell.CELL_TYPE_NUMERIC: // 数字
          //如果为时间格式的内容
          if (HSSFDateUtil.isCellDateFormatted(cell)) {      
             //注:format格式 yyyy-MM-dd hh:mm:ss 中小时为12小时制,若要24小时制,则把小h变为H即可,yyyy-MM-dd HH:mm:ss
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
             value=sdf.format(HSSFDateUtil.getJavaDate(cell.
             getNumericCellValue())).toString();                                 
               break;
           } else {
               value = new DecimalFormat("0").format(cell.getNumericCellValue());
           }
          break;
      case HSSFCell.CELL_TYPE_STRING: // 字符串
          value = cell.getStringCellValue();
          break;
      case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
          value = cell.getBooleanCellValue() + "";
          break;
      case HSSFCell.CELL_TYPE_FORMULA: // 公式
          value = cell.getCellFormula() + "";
          break;
      case HSSFCell.CELL_TYPE_BLANK: // 空值
          value = "";
          break;
      case HSSFCell.CELL_TYPE_ERROR: // 故障
          value = "非法字符";
          break;
      default:
          value = "未知类型";
          break;
 }

EasyExcel

EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值