其实前面提到的导出数据到Excel文件中的写入流方法都是新建状态下的Excel文件,重新定位文件头和文件尾,会的损坏原文件。
假如有一个已存Excel文件xlsFile.xls中,已有其它数据,只需向其中添加一引起数据,显然在前几种方法难解决。
现有办法解决,效率相对还过得去(还可以向其中写Excel公式):
大体方法以描述:定义一个 lst :TstringList ,向其中添加要写入Excel文件的内容。每列以#9表格控制符结尾。
然后把数据先写到剪切板上 clipboard.astext := lst.Text;
然后打开已存xlsFile.xls,定位要写入数据的cell,shtSheet.Paste;
如下代码:
var
省。。。。
tmpstr:= ExtractFilePath(Application.ExeName) + '漂染车间'+exdtdtProductDate.Text+'生产排程.xls';
try
exclplctnApp.Connect;
except
on E: Exception do
begin
E.Message := '无法连接Excel';
Raise;
end;
end;
exclplctnApp.Visible[0] := False;
exclwrkbkBook.ConnectTo(exclplctnApp.Workbooks.Open(tmpstr,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0));
exclwrkshtSheet.ConnectTo(exclwrkbkBook.Sheets[1] as _Worksheet);
(exclplctnApp.Worksheets.Item[1] as _WorkSheet).Activate(0);//激活worksheet
//下面写入数据
lst := TStringList.Create;
try
try
dsTastList.DisableControls;
dsTastList.First;
n:= 21;
for i:= 1 to dsTastList.RecordCount do
begin
s_tmp := EmptyStr;
tmpstr:= '=IF(O22="**",F22&K22&O22&N22,IF(OR(K22="黑色",K22="白色"'+
',K22="原纱克"),F22&K22,IF(OR(K22<>"黑色",K22<>"白色",K22<>"原纱克"),F22&K22&O22,"")))';
tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
s_tmp := s_tmp + tmpstr + #9; //名称引用
tmpstr:= '=IF(G22="车间自排",F22&G22&K22,IF(D22<>"",F22&G22,""))';
tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
s_tmp := s_tmp + tmpstr + #9;//缸台引用
tmpstr:= '=O22&S22';
tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
s_tmp := s_tmp + tmpstr + #9;//颜色引用
tmpstr:= '=IF(OR(I22<=0,I22=""),"",IF(AND(LEFT(Q22,2)="TD",I22<0.8),"小缸",'+
'IF(AND(LEFT(Q22,2)<>"TD",I22<2.5),"401",IF((I22<10.5),"301",IF((I22<31.5)'+
',"107",IF((I22<42),"106",IF((I22<63),"105",IF((I22<73.5),"205","104"))))))))';
tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
s_tmp := s_tmp + tmpstr+ #9; //缸台整理
tmpstr:= '=IF(D22<>"",1,"")';
tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
s_tmp := s_tmp + tmpstr+ #9; //轮数
s_tmp := s_tmp + dsTastList.FieldByName('WD_P_DATE').AsString + #9; //生产日期
tmpstr:= '=IF(AND(I22<>"")*OR(K22="黑色",K22="白色",K22="原纱克"),"车间自排",'+
'IF(D22<>"104",D22,IF(I22<100,"104",IF(I22<220,"108",IF(I22<320,"103",'+
'IF(I22<440,"102",IF(I22<640,"101","分批")))))))';
tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
s_tmp := s_tmp + tmpstr+ #9;//生产缸台
tmpstr:= '=IF(AND(O22="星韵",A22<>A21),SUMIF(A:A,F22&K22&O22&N22,T:T),'+
'IF(AND(A22<>A21)*OR(K22="黑色",K22="白色",K22="原纱克"),SUMIF(A:A,'+
'F22&K22,T:T),IF(A22<>A21,SUMIF(A:A,F22&K22&O22,T:T),"")))';
tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
tmpstr:= StringReplace(tmpstr,'21',IntToStr(i+n-1),[rfReplaceAll]);
s_tmp := s_tmp + tmpstr+ #9;//生产数量
tmpstr:= '=IF(AND(O22="星韵",A22<>A21),SUMIF(A:A,F22&K22&O22&N22,J:J),'+
'IF(AND(A22<>A21)*OR(K22="黑色",K22="白色",K22="原纱克"),'+
'SUMIF(A:A,F22&K22,J:J),IF(A22<>A21,SUMIF(A:A,F22&K22&O22,J:J),"")))';
tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
tmpstr:= StringReplace(tmpstr,'21',IntToStr(i+n-1),[rfReplaceAll]);
s_tmp := s_tmp + tmpstr+ #9; //引用数量
tmpstr:= '=IF(LEFT(Q22,2)="TD",T22*1.5,T22)';
tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
s_tmp := s_tmp + tmpstr+ #9; //未完成数
s_tmp := s_tmp + dsTastList.FieldByName('C_COLOR_Z').AsString + #9; //类别
s_tmp := s_tmp + dsTastList.FieldByName('S_S_TYPE').AsString + #9; //类别
s_tmp := s_tmp + dsTastList.FieldByName('WH_NO').AsString + #9; //生产单号
s_tmp := s_tmp + dsTastList.FieldByName('WD_S_NO').AsString + #9; //订单号
s_tmp := s_tmp + dsTastList.FieldByName('WD_CV_NAME').AsString + #9; //客户
s_tmp := s_tmp + dsTastList.FieldByName('WH_URGENCY').AsString + #9; //紧急程度
s_tmp := s_tmp + dsTastList.FieldByName('WD_P_CODE').AsString + #9; //物料编号
s_tmp := s_tmp + dsTastList.FieldByName('WD_P_NAME').AsString + #9; //物料名称
s_tmp := s_tmp + dsTastList.FieldByName('WD_COL_NAME').AsString + #9; //颜色
s_tmp := s_tmp + dsTastList.FieldByName('WD_S_QTY').AsString + #9; //订单数量
s_tmp := s_tmp + dsTastList.FieldByName('WD_MUST_IN_QTY').AsString + #9; //指定入库
s_tmp := s_tmp + dsTastList.FieldByName('WD_U_CODE').AsString+ #9; //主单位
s_tmp := s_tmp + dsTastList.FieldByName('WD_U2_QTY').AsString + #9; //次数量
s_tmp := s_tmp + dsTastList.FieldByName('WD_U2_CODE').AsString + #9; //次单位
s_tmp := s_tmp + dsTastList.FieldByName('WD_YQ_DATE').AsString+ #9; //生产交期
s_tmp := s_tmp + dsTastList.FieldByName('WD_JQ_IS_WAIT').AsString+ #9; //交期待定
s_tmp := s_tmp + dsTastList.FieldByName('S_STATUS').AsString+ #9; //状态
s_tmp := s_tmp + DateToStr(Now) + #9; //处理日期
tmpstr:= '=IF(A22="","",VLOOKUP(A22,$A$21:$G$2360,7,FALSE))';
tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
s_tmp := s_tmp + tmpstr+ #9; //缸台号
s_tmp := s_tmp + '' + #9; //车间生产反馈
lst.Add(s_tmp);
dsTastList.Next;
end;
if lst.Count > 0 then
begin
clipboard.astext := lst.Text;
exclwrkshtSheet.Range['A22','A22'].Select;
exclwrkshtSheet.Paste;
Clipboard.Clear;
exclplctnApp.Visible[0] := True;
end;
except
exclplctnApp.Workbooks.Close(0);
exclplctnApp.Disconnect;//关闭Excel
exclplctnApp.Quit;
end;
finally
//exclplctnApp.Columns.AutoFit;
dsTastList.EnableControls;
exclplctnApp.Save;
end;
分享到:
相关推荐
本文详细介绍了如何在 Informatica 中导入 Excel 文件作为源文件的步骤,从准备 Excel 电子表格到定义范围和指定数据类型,最后将 Excel 文件导入 Informatica。通过本文,我们可以轻松地将 Excel 文件导入 ...
除了直接从Excel文件导入数据外,还有一种常见的数据导入方式是通过Simulink模型库中的“From Workspace”模块。这种方式特别适用于那些以二进制或十六进制格式存储的数据,这些数据通常需要经过预处理后才能被...
小结 通过以上分析,我们可以看到 Java 实现 Excel 导入涉及到了前端表单设计、JavaScript 交互、后端控制器处理、数据验证、Excel 解析以及数据持久化等多个环节。这些步骤共同构成了一个完整的 Excel 导入功能...
Java中easypoi导入excel文件列名相同的处理方案 Easypoi是一个基于POI的Excel处理工具,它提供了简洁易用的API,能够快速实现Excel的导入和导出。然而,在使用Easypoi导入Excel文件时,可能会碰到列名相同的问题。...
在日常开发工作中,经常需要处理Excel文件,比如将数据库中的数据导出为Excel格式,或将Excel中的数据批量导入到数据库中。本文将详细介绍如何使用PHP来实现这些功能。通过实际案例的分析,我们将深入探讨数据的导入...
它通过注解的方式简化了对Excel文件的操作,使得开发者可以更加便捷地实现数据的导入导出。尽管其功能强大,但在实际使用过程中,开发者也需要了解一些关于其依赖、错误处理以及使用的细节。 ### 如何引入jar包 在...
通过此功能,用户可以轻松地将外部数据(如Excel文件)导入系统内部,或将系统内的数据导出至外部文件,极大地提高了工作效率并简化了数据处理流程。 #### 二、基础知识简介 在深入探讨具体实现之前,我们需要了解...
在上面的代码中,我们首先导入 pandas 库,然后使用 read_excel() 函数读取 Excel 文件。read_excel() 函数需要两个参数:第一个参数是 Excel 文件的路径,第二个参数是引擎类型,我们这里使用 openpyxl 库作为引擎...
- **行数据缓存**:SXSSFWorkbook允许用户自定义一个窗口大小(默认为100),在生成Excel文件过程中,仅在内存中维护这个窗口大小内的行数据。 - **动态释放**:当行数据超出窗口大小时,之前的行数据会被写入到一...
根据提供的标题、描述以及部分代码内容,我们可以了解到这篇文章主要探讨的是如何在SQL Server环境中利用`OPENROWSET`函数以及BCP工具将外部数据(如Excel文件)导入到数据库表中的方法。下面我们将对这些知识点进行...
#### 小结 通过上述分析可以看出,ADF结合Apache POI库为开发者提供了一套高效便捷的方式来处理Excel文件的导出任务。这种方式不仅降低了开发难度,同时也保证了程序的灵活性和可维护性。对于需要频繁处理大量数据的...
2. **Excel文件导入至SQL Server** - **使用BCP命令行工具导入Excel文件** ```sql EXEC master..xp_cmdshell 'bcp "dbname..tablename" in c:\DT.txt -c -S servername -U sa -P password' ``` 这条语句将Excel...
新建一个 Access 文件,新建表,然后将 Excel 文件导入其中,选择第一行为列名。 步骤3:在 ArcMap 中添加 XY 数据 在 ArcMap 中,选择“工具”菜单,然后选择“添加 XY 数据”。在弹出的对话框中,选择我们刚才...
### 小结 整个Cadence网表导入PADS的过程并不是一个简单的操作,它需要用户对各个环节都非常了解,并且在操作过程中仔细检查可能出现的错误。文档中提供的步骤只是一种标准操作方法,实际使用中可能会遇到其他未...
该库可以方便地处理Excel文件中的数据。 #### 三、实现步骤详解 ##### 1. 导入必要的模块 ```python import random from openpyxl import Workbook from openpyxl.styles import Font, Color, colors, Border, ...
其中,`in` 表示从文件导入数据到数据库;`out` 表示从数据库导出数据到文件。 **示例命令:** ```bash bcp [database_name].[schema].table_name in "data_file" -d [database_name] -c -S [server_name] ``` **...
课程计划为一课时,教学过程包括导入课题、新课讲解、课堂练习、课堂小结和课后作业。在导入阶段,通过对比Word和Excel在处理数据方面的优劣,激发学生对Excel的兴趣。新课讲解部分,老师会引导学生启动Excel,认识...
【西门子PLC培训小结】 本次培训主要聚焦于西门子的PLC系统,特别是S7-300系列。首先,我们深入理解了上位机和下位机的概念。上位机通常包括HMI(人机界面)、PC或工控机,负责监控和数据交互,而下位机则包含PLC、...