XLSReadWriteII 读取EXCEL数据 动态响应字段的列编号
我们在通过XLSReadWriteII读取EXCEL表中的数据时,往往通过EXCEL中二个列,对应数据库中的指定字段,通过索引“字段”找到数据“字段”,实现读取相关数据。
报税系统,导出的个人所得税数据,就是存入在一个EXCEL表格中:EXCEL列编号B存放“姓名”,列编号AL存放"个人所得税"。

通过编程,我们很容易地,读取“个人所得税”的数据,加入到下一个月“工资报表”中的抵扣项的“个人所得税”中。
但是,由税务软件导出的EXCEL表“姓名”和“个所所得税”项目的“列编号”是动态变化的。2022年10份的EXCEL表,列编号AL存放"个人所得税",至2022年11月,列编号AM存放"个人所得税",列编号增长了。常规编程的处理方式,遇到问题。

解决办法,在导入数据前,加入一个对列编号的确认选择项。


代码如下:
- xls := TXLSReadWriteII4.Create(Self);
- XLS.Filename := sEdit2.Text;
- XLS.Read;
- S1:=sComboBox1.Text;
- S2:=sComboBox2.Text;
- iCow1:=TextToCol(S1); // 由Excel列英文字符获取Col A=1 AA=27 获取Col值
- iCow2:=TextToCol(S2); // 由Excel列英文字符获取Col A=1 AA=27 获取Col值
-
- // 外循环 EXCEL Row 0 至 N-1
- for i:=XLS.Sheets[0].FirstRow+1 to XLS.Sheets[0].LastRow do // 行循环 +1 从第2行开始
- begin
- S1:=XLS.Sheets[0].AsFmtString[iCow1,i]; // 姓名 [列,行] 0..n-1 1
- S2:=XLS.Sheets[0].AsFmtString[iCow2,i]; // 个税
- // 内循环
- with ClientDataSet1 do
- begin
- First;
- while not Eof do
- begin
- if Trim(S1)=Trim(FieldByName('姓名').AsString) then
- begin
- Edit;
- FieldByName(sDate).AsString:=S2;
- Post;
- end;
- Next;
- end;
- First;
- end;
- end;
- XLS.Free;