服务器端文档组件
创始人
2024-02-14 16:17:02

服务器端文档组件

  • 项目中需要使用文档组件操作文档(导入,导出)
  • 操作文档的框架有如下几种

1.Apache POI

1.概述

  • 1.Apache POI是用Java编写的免费开源的跨平台的 Java API
  • 2.Apache POI提供API给Java程序对Microsoft Office(Excel、WORD、PowerPoint、Visio等)格式文档读和写的功能
  • 3.POI为Poor Obfuscation Implementation的首字母缩写,意为:可怜的模糊实现

2.功能

  • 1.操作Excel
    • 1.HSSF - 提供读写Microsoft Excel XLS格式档案的功能(.xls)
    • 2.XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能(.xlsx)
  • 2.操作Word
    • 1.HWPF - 提供读写Microsoft Word DOC97格式档案的功能
    • 2.XWPF - 提供读写Microsoft Word DOC2003格式档案的功能
  • 3.操作PowerPoint
    • HSLF - 提供读写Microsoft PowerPoint格式档案的功能(PPT)
  • 4.操作Visio
    • HDGF - 提供读Microsoft Visio格式档案的功能(流程图)
  • 5.操作Publisher
    • HPBF - 提供读Microsoft Publisher格式档案的功能(排版设计)
  • 6.操作Outlook
    • HSMF - 提供读Microsoft Outlook格式档案的功能(电子邮件)

3.特点

1.优点

  • 方便

2.缺点

  • 数据大容易内存溢出

4.不同文档操作步骤

1.操作Excel

// HSSF(Horrible SpreadSheet Format):通过HSSF可以用纯Java代码来读取、写入、修改Excel文件
// HSSF为读取操作提供了两类API:usermodel和eventusermodel。即“用户模型”和“事件-用户模型”1.Excel中的表单、工作表、行、单元格的关系
// 一个Excel文件对应于一个workbook(HSSFWorkbook),
// 一个workbook可以有多个sheet(HSSFSheet)组成,
// 一个sheet是由多个row(HSSFRow)组成,
// 一个row是由多个cell(HSSFCell)组成2.常用的类和方法
//1.HSSFWorkbook:表单(代表一个excel的整个文档)
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); //创建一个新的表单,一般用于导出
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(InputStream inputStream); //创建一个关联输入流的表单,将一个excel文件封装成表单,一般用于导入//2.HSSFSheet:工作表(同一个表单可以创建多个工作表)
HSSFSheet hssfSheet = hssfWorkbook.createSheet(); //创建一个默认名称的Sheet,从sheet0开始
HSSFSheet sheetname= hssfWorkbook.createSheet(String sheetname); //创建一个指定名称的Sheet
hssfWorkbook.setActiveSheet(int index); //设置默认选中的工作表,索引从0开始HSSFSheet getSheet(String sheetName); //通过名称获取指定Sheet
HSSFSheet getSheetAt(int index); //通过索引获取指定Sheet,索引从0开始
int getNumberOfSheets(); //获取当前表单的sheet总个数//3.HSSFRow:行
HSSFRow hssfRow = hssfSheet.createRow(int rownum);//创建行,需要指定行号,行号从0开始
setHeightInPoints(float height); //设置行的高度HSSFRow getRow(int index); //根据索引获取指定的行
getLastRowNum(); //获取最后的行的索引,没有行或者只有一行的时候返回0//4.Column:列
hssfSheet.autoSizeColumn(int column); //设置工作表指定列的长度随内容自动调整,最好单独记录列数再循环,否则会出现某列没有设置自适应的情况
hssfSheet.setColumnWidth(int columnIndex, int width); //设置某一列的宽度,width=字符个数 * 256(例:20个字符的宽度就是20 * 256),最大不能超过255个字符,可以在自适应的情况下特别指定//5.HSSFCell:单元格
HSSFCell createCell(int column); 创建新的单元格
HSSFCell setCell(shot index);
HSSFCell getCell(shot index);
HSSFCell getCell(CellReference.convertColStringToIndex(“A”)); 根据列名英文字母获取。
setRowStyle(HSSFCellStyle style); //设置行样式
short getLastCellNum(); //获取最后的单元格号,如果单元格有第一个开始算,lastCellNum就是列的个数
setCellValue(String value); //设置单元格的值
setCellType(); //设置单元格类型,如 字符串、数字、布尔等
setCellStyle(); //设置单元格样式
String getStringCellValue(); //获取单元格中的字符串值
setCellStyle(HSSFCellStyle style); //设置单元格样式,例如字体、加粗、格式化
setCellFormula(String formula); //设置计算公式,计算的结果作为单元格的值,也提供了异常常用的函数,如求和"sum(A1,C1)"、日期函数、字符串相关函数、CountIf和SumIf函数、随机数函数等//HSSFCellStyle :单元格样式
HSSFCellStyle cellStyle = hssfWorkbook.createCellStyle(); //创建单元格样式
cellStyle.setFillBackgroundColor(short bg); //设置背景色,.xls中该设置不生效
cellStyle.setFillForegroundColor(short bg); //设置填充前景色,该设置生效,其中参数使用IndexedColors.RED.getIndex()
cellStyle .setFillPattern(FillPatternType fp); //设置填充样式,其中参数使用FillPatternType.FINE_DOTS
cellStyle.setFont(HSSFFont hf); //设置字体样式
cellStyle.setAlignment(HorizontalAlignment align); //设置水平对齐方式 HorizontalAlignment.CENTER 居中对齐
cellStyle.setVerticalAlignment(VerticalAlignment align); //设置垂直对齐方式 VerticalAlignment.BOTTOM 设置底部对齐
cellStyle.setVerticalAlignment(VerticalAlignment align); //设置垂直对齐方式
cellStyle.setBorderTop(BorderStyle border); //设置用于单元格顶部边框的边框类型
cellStyle.setBorderBottom(BorderStyle border); //设置用于单元格底部边框的边框类型 BorderStyle.DOTTED 点类型
cellStyle.setBorderLeft(BorderStyle border); //设置用于单元格左部边框的边框类型
cellStyle.setBorderRight(BorderStyle border); //设置用于单元格右部边框的边框类型
cellBGStyle.setTopBorderColor(IndexedColors.RED.getIndex()); //设置用于单元格顶部边框的边框颜色
cellBGStyle.setBottomBorderColor(IndexedColors.BLUE.getIndex()); //设置用于单元格底部边框的边框颜色
cellBGStyle.setLeftBorderColor(IndexedColors.PINK.getIndex()); //设置用于单元格左部边框的边框颜色
cellBGStyle.setRightBorderColor(IndexedColors.CORAL.getIndex()); //设置用于单元格右部边框的边框颜色HSSFDataFormat hssfDataFormat = hssfWorkbook.createDataFormat(); //创建表单数据格式
short format = hssfDataFormat.getFormat("@"); //设置数据格式为文本
cellBGStyle.setDataFormat(format); //设置数据格式HSSFDataFormat hssfDataFormat = hssfWorkbook.createDataFormat(); //创建表单数据格式short format = hssfDataFormat.getFormat("yyyy年m月d日"); //设置数据格式为日期cellBGStyle.setDataFormat(format); //设置数据格式//6.Merge
int addMergedRegion(CellRangeAddress region);  //合并单元格
CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol); 单元格范围, 用于合并单元格,需要指定要合并的首行、最后一行、首列、最后一列。//7.write:导出
write(); //java.lang.IllegalStateException: Newly created Document, cannot save in-place
write(File newFile); //导出到一个文件中
write(OutputStream stream); //导出到输入流中//HSSFFont:字体,
HSSFCellStyle cellFontStyle = hssfWorkbook.createCellStyle(); //样式
HSSFFont hssfFont = hssfWorkbook.createFont();
hssfFont.setColor(IndexedColors.BLUE.getIndex()); //字体颜色
hssfFont.setBold(true); //是否粗体
hssfFont.setCharSet(); //设置字符集
hssfFont.setFontHeight(); //设置字体高度
hssfFont.setFontHeightInPoints(); //设置字体高度,标准值10, 12, 14 etc..
hssfFont.setFontName("楷体"); //根据名称设置字体类型
hssfFont.setItalic(true); //是否斜体
hssfFont.setStrikeout(true); //设置是否在文本中使用消线水平线(会覆盖掉下划线)
hssfFont.setTypeOffset(Font.SS_SUPER); //设置字体类型,是上标或下标
hssfFont.setUnderline(Font.U_SINGLE_ACCOUNTING); //下划线 U_SINGLE_ACCOUNTING单下划线//HSSFName:名称
HSSFDataFormat :日期格式化
HSSFHeader : Sheet的头部
HSSFFooter :Sheet的尾部
HSSFDateUtil :日期工具
HSSFPrintSetup :打印设置
HSSFErrorConstants:错误信息表
2.从Excel读取数据
3.向Excel写入数据

4.How to read Date From Formula Cell in Excel Sheet

5.How to write Formula Cell in Excel Sheet

6.How to Read Data from Password Protected Excel

7.How to Fill Background and Foreground Colors into Ce

8.MS-Excel With Java Hash Map

9.How to Read Data From Database and Write into Excel

10.How To Read Data from Excel and Write into Database

11.Data Driven Testing in Selenium TestNG DataPriovid

12.How TO Write WebTable data into Excel Sheet in Sele

13.How to work with Date Cells in the MS-Excel

基础示例
首先引入apache poi的依赖

org.apache.poi
poi
3.8

public static void createExcel() throws IOException{
// 获取桌面路径
FileSystemView fsv = FileSystemView.getFileSystemView();
String desktop = fsv.getHomeDirectory().getPath();
String filePath = desktop + “/template.xls”;

File file = new File(filePath);
OutputStream outputStream = new FileOutputStream(file);
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Sheet1");
HSSFRow row = sheet.createRow(0);
row.createCell(0).setCellValue("id");
row.createCell(1).setCellValue("订单号");
row.createCell(2).setCellValue("下单时间");
row.createCell(3).setCellValue("个数");
row.createCell(4).setCellValue("单价");
row.createCell(5).setCellValue("订单金额");
row.setHeightInPoints(30); // 设置行的高度HSSFRow row1 = sheet.createRow(1);
row1.createCell(0).setCellValue("1");
row1.createCell(1).setCellValue("NO00001");// 日期格式化
HSSFCellStyle cellStyle2 = workbook.createCellStyle();
HSSFCreationHelper creationHelper = workbook.getCreationHelper();
cellStyle2.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));
sheet.setColumnWidth(2, 20 * 256); // 设置列的宽度HSSFCell cell2 = row1.createCell(2);
cell2.setCellStyle(cellStyle2);
cell2.setCellValue(new Date());row1.createCell(3).setCellValue(2);// 保留两位小数
HSSFCellStyle cellStyle3 = workbook.createCellStyle();
cellStyle3.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
HSSFCell cell4 = row1.createCell(4);
cell4.setCellStyle(cellStyle3);
cell4.setCellValue(29.5);// 货币格式化
HSSFCellStyle cellStyle4 = workbook.createCellStyle();
HSSFFont font = workbook.createFont();
font.setFontName("华文行楷");
font.setFontHeightInPoints((short)15);
font.setColor(HSSFColor.RED.index);
cellStyle4.setFont(font);HSSFCell cell5 = row1.createCell(5);
cell5.setCellFormula("D2*E2");  // 设置计算公式// 获取计算公式的值
HSSFFormulaEvaluator e = new HSSFFormulaEvaluator(workbook);
cell5 = e.evaluateInCell(cell5);
System.out.println(cell5.getNumericCellValue());workbook.setActiveSheet(0);
workbook.write(outputStream);
outputStream.close();

}

示例2:读取Excel,解析数据
public static void readExcel() throws IOException{
FileSystemView fsv = FileSystemView.getFileSystemView();
String desktop = fsv.getHomeDirectory().getPath();
String filePath = desktop + “/template.xls”;

FileInputStream fileInputStream = new FileInputStream(filePath);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
POIFSFileSystem fileSystem = new POIFSFileSystem(bufferedInputStream);
HSSFWorkbook workbook = new HSSFWorkbook(fileSystem);
HSSFSheet sheet = workbook.getSheet("Sheet1");int lastRowIndex = sheet.getLastRowNum();
System.out.println(lastRowIndex);
for (int i = 0; i <= lastRowIndex; i++) {HSSFRow row = sheet.getRow(i);if (row == null) { break; }short lastCellNum = row.getLastCellNum();for (int j = 0; j < lastCellNum; j++) {String cellValue = row.getCell(j).getStringCellValue();System.out.println(cellValue);}
}bufferedInputStream.close();

Java Web 中导出和导入Excel
@SuppressWarnings(“resource”)
@RequestMapping(“/export”)
public void exportExcel(HttpServletResponse response, HttpSession session, String name) throws Exception {

String[] tableHeaders = {"id", "姓名", "年龄"}; HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Sheet1");
HSSFCellStyle cellStyle = workbook.createCellStyle();    
cellStyle.setAlignment(HorizontalAlignment.CENTER);  
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);Font font = workbook.createFont();  
font.setColor(HSSFColor.RED.index);  
font.setBold(true);
cellStyle.setFont(font);// 将第一行的三个单元格给合并
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));
HSSFRow row = sheet.createRow(0);
HSSFCell beginCell = row.createCell(0);
beginCell.setCellValue("通讯录");	
beginCell.setCellStyle(cellStyle);row = sheet.createRow(1);
// 创建表头
for (int i = 0; i < tableHeaders.length; i++) {HSSFCell cell = row.createCell(i);cell.setCellValue(tableHeaders[i]);cell.setCellStyle(cellStyle);    
}List users = new ArrayList<>();
users.add(new User(1L, "张三", 20));
users.add(new User(2L, "李四", 21));
users.add(new User(3L, "王五", 22));for (int i = 0; i < users.size(); i++) {row = sheet.createRow(i + 2);User user = users.get(i);row.createCell(0).setCellValue(user.getId());    row.createCell(1).setCellValue(user.getName());    row.createCell(2).setCellValue(user.getAge());    
}OutputStream outputStream = response.getOutputStream(); 
response.reset(); 
response.setContentType("application/vnd.ms-excel");    
response.setHeader("Content-disposition", "attachment;filename=template.xls");      workbook.write(outputStream);
outputStream.flush();    
outputStream.close();

}

导入示例
使用SpringMVC上传文件,需要用到commons-fileupload

commons-fileupload
commons-fileupload
1.3




导出

index.jsp

2.JXL

Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。jxl 由于其小巧 易用的特点, 逐渐已经取代了 POI-excel的地位, 成为了越来越多的java开发人员生成excel文件的首选。

3.excelPOI

4.easyExcel

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...