P4-9 案例:根据Excel工资表生成工资条
案例:根据Excel工资表生成工资条
需求
- 1、一个Excel工资文件,每个Sheet是一个部门,每个部门都有员工的姓名、编号、基本工资、考勤扣款、奖金,然后生成每个员工一个工资条word文件,文件名为【部门名+姓名+员工编号】
- 2、允许用户选择文字文件以及保存文件夹
1 |
|
分析不足
- 1、多写了一层cell循环,可以用ExcelHelpers.getCellStringValue()这个方法直接取对应的值
- 2、int cellIndex = row.getFirstCellNum() for循环中的条件,最好在外面用变量命名后在使用,要不然浪费性能
- 3、LinkedList
Lists =new LinkedList<>(); 这个可以去掉 - 4、rowIndex+1 可以在for循环的条件中是限制 比如:int i =1;
完善后
1 |
|
在此基础上增加功能
- 允许用户选择文字文件以及保存文件夹
- 添加了两个窗口,让用户自己选择,但是模板是我内置的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34String yFile="D:/JavaTest1/WordTest2/工资条模板.docx";
String xlsxFile =GUI.fileOpenBox("请选择工资表","xlsx");//选择xlsx文件
String fileName = GUI.dirOpenBox("请选择要保存到的文件夹").replace("\\","/");//获取文件夹路径,然后把\\都换成/ 来兼容其他系统
Workbook workbook = ExcelHelpers.openFile(xlsxFile);//获取对应文件
int sheetmax = workbook.getNumberOfSheets();
for (int sheetIndex=0;sheetIndex<sheetmax;sheetIndex++) //循环读取页签中的内容 sheet
{
Sheet sheet = workbook.getSheetAt(sheetIndex);//获取第x页签
String 部门=sheet.getSheetName();
int rowNumber=sheet.getLastRowNum();
for (int rowIndex = 1;rowIndex<=rowNumber;rowIndex++)//跳过表头
{
String 员工姓名=ExcelHelpers.getCellStringValue(sheet,rowIndex,0);
String 工号=ExcelHelpers.getCellStringValue(sheet,rowIndex,1);
double 基本工资=ExcelHelpers.getCellDoubleValue(sheet,rowIndex,2);
double 奖金=ExcelHelpers.getCellDoubleValue(sheet,rowIndex,3);
double 考勤罚款=ExcelHelpers.getCellDoubleValue(sheet,rowIndex,4);
double 实发工资=基本工资+奖金+考勤罚款;
HashMap<String,Object> data =new HashMap<>();
data.put("{员工姓名}",员工姓名);
data.put("{工号}",工号);
data.put("{基本工资}",基本工资);
data.put("{奖金}",奖金);
data.put("{考勤罚款}",考勤罚款);
data.put("{实发工资}",实发工资);
data.put("{部门}",部门);
data.put("{日期}",LocalDate.now());//获取当前日期 年/月/日
//System.out.println(fileName);
String newFile=fileName+"/"+部门+"-"+员工姓名+"-"+工号+".docx";
WordTemplateRenderer.render(yFile, data,newFile);
}
}
ExcelHelpers.close(workbook);
- 添加了两个窗口,让用户自己选择,但是模板是我内置的。
P4-9 案例:根据Excel工资表生成工资条
http://example.com/2024/08/16/SE101-零基础玩Java/Part4-笔记/P4-9 案例:根据Excel工资表生成工资条/