实现操作 数据导入到word、excel操作
数据导入到word指定的格式位置上
-
FreeMarker 制作word模板导出
-
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
-
<!--添加freeMarker-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.20</version>
</dependency>
-
-
-
word模板然后将模板转换为xml文件。在word模板中需要定义好我们的占位符哦,使用${string}的方式(主要是为了进行定位)。
-
将我们的xml文档的后缀改为ftl,然后用可以打开ftl文件的软件打开我们的ftl文件
-
添加freeMarker标签。在表格代码间用自定的标签括起来
-
代码
-
-
插入图片
private static String getImageStr(String imagepath) {
InputStream in = null;
byte[] data = null;
try {
in = new FileInputStream(imagepath);
data = new byte[in.available()];
in.read(data);
in.close();
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);
} catch (IOException e) {
System.out.println(e.getMessage());
}
return null;
}
数据poi导入到excel表中
-
了解
-
用JavaPOI导出Excel时,我们会考虑到Excel版本及数据量的问题。针对不同的Excel版本,要采用不同的工具类。
HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;
XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx;
对于不同版本的EXCEL文档要使用不同的工具类,如果使用错了,会提示如下错误信息。
org.apache.poi.openxml4j.exceptions.InvalidOperationException
org.apache.poi.poifs.filesystem.OfficeXmlFileException
从POI 3.8版本开始,提供了一种基于XSSF的低内存占用的API----SXSSF
当数据量超出65536条后,在使用HSSFWorkbook或XSSFWorkbook,程序会报OutOfMemoryError:Javaheap space;内存溢出错误。这时应该用SXSSFworkbook。 -
先创建一个工作簿,一个工作簿可以有多个工作表,一个工作表可以有多个行,一个行可以有多个单元格
-
根据excel文档对象,针对不同的execl类型分为HSSFWordbook(2003)和 XSSFWordbook(2007)
-
-
Sheet : Excel的表单
-
-
Row : Excel的行
-
-
Cell : Excel的格子单元
-
-
Font : Excel的字体
-
-
CellStyle :格子单元的样式
-
-
准备工作 加入POI依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.0.1</version>
</dependency>-
创建Excel
//测试创建excel文件
-
创建单元格
// 测试创建excel文件
-
设置格式
// 测试创建excel文件
-
绘制图形
//绘制图形
public static void main(String[] args) throws Exception {
//1.创建workbook工作簿
Workbook wb = new XSSFWorkbook();
//2.创建表单Sheet
Sheet sheet = wb.createSheet("test");
//读取图片流
FileInputStream stream=new FileInputStream("e:\\logo.jpg");
byte[] bytes= IOUtils.toByteArray(stream);
//读取图片到二进制数组
stream.read(bytes);
//向Excel添加一张图片,并返回该图片在Excel中的图片集合中的下标
int pictureIdx = wb.addPicture(bytes,Workbook.PICTURE_TYPE_JPEG);
//绘图工具类
CreationHelper helper = wb.getCreationHelper();
//创建一个绘图对象
Drawing<?> patriarch = sheet.createDrawingPatriarch();
//创建锚点,设置图片坐标
ClientAnchor anchor = helper.createClientAnchor();
anchor.setCol1(0);//从0开始
anchor.setRow1(0);//从0开始
//创建图片
Picture picture = patriarch.createPicture(anchor, pictureIdx);
picture.resize();
//6.文件流
FileOutputStream fos = new FileOutputStream("E:\\test.xlsx");
//7.写入文件
wb.write(fos);
fos.close();
} -
加载Excel
public class PoiTest06 {
//单元格样式
public static void main(String[] args) throws Exception {
//1.创建workbook工作簿
Workbook wb = new XSSFWorkbook("E:\\demo.xlsx");
//2.获取sheet 从0开始
Sheet sheet = wb.getSheetAt(0);
int totalRowNum = sheet.getLastRowNum();
Row row = null;
Cell cell = null;
//循环所有行
for (int rowNum = 3; rowNum <sheet.getLastRowNum(); rowNum++) {
row = sheet.getRow(rowNum);
StringBuilder sb = new StringBuilder();
//循环每行中的所有单元格
for(int cellNum = 2; cellNum < row.getLastCellNum();cellNum++) {
cell = row.getCell(cellNum);
sb.append(getValue(cell)).append("-");
}
System.out.println(sb.toString());
}
}
//获取数据
private static Object getValue(Cell cell) {
Object value = null;
switch (cell.getCellType()) {
case STRING: //字符串类型
value = cell.getStringCellValue();
break;
case BOOLEAN: //boolean类型
value = cell.getBooleanCellValue();
break;
case NUMERIC: //数字类型(包含日期和普通数字)
if(DateUtil.isCellDateFormatted(cell)) {
value = cell.getDateCellValue();
}else{
value = cell.getNumericCellValue();
}
break;
case FORMULA: //公式类型
value = cell.getCellFormula();
break;
default:
break;
}
return value;
}
} -
-
-