ex.CloseAllExcelApps;
ProcessedAddr := TStringList.Create;
try
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.Visible := True;
ExcelApp.DisplayAlerts := False;
ExHWND := ExcelApp.Hwnd;
while True do
begin
MemMaster.BeforeScroll := nil;
MemMaster.AfterScroll := nil;
if str <> '主表' then
begin
MemMaster.EmptyTable;
tempsql := Format(sql, [pageNo * 1000]);
MemMaster.Close;
cdsmaster.data := FGetBroker.FindBySql(tempsql, null);
if cdsmaster.Recordcount = 0 then
Break;
MemMaster.Open;
MemMaster.First;
end;
CheckBox1.Checked := True;
CheckBox1Click(CheckBox1);
if CdsMaster.RecordCount = 0 then
raise Exception.Create('没有找到模板!');
HasOne;
if CdsDetailwj.IsNull then
raise Exception.Create('尚未增加文件!');
for i := 0 to MemMaster.RecordCount - 1 do
begin
SiMain.LogMessage(Format('==== 开始处理记录[xmcode=%s] ====', [MemMasterxmcode.AsString]));
if IsIconic(Application.Handle) then
Application.Restore;
Application.ProcessMessages;
WB := UnAssigned;
UsedRange := UnAssigned;
FoundRange := UnAssigned;
isopen := False;
fileUncompressed := False;
ProcessedAddr.Clear;
tempfile := RandomFileName;
GetDetail('xmid=' + QuotedStr(MemMasterxmid.AsString));
SiMain.LogMessage(Format('准备解压[xmcode=%s]', [MemMasterxmcode.AsString]));
try
UnCompressFileName(CdsDetailwj, tempfile);
fileUncompressed := True;
except
on E: Exception do
begin
SiMain.LogMessage(Format('解压失败[xmcode=%s]: %s', [MemMasterxmcode.AsString, E.Message]));
end;
end;
if fileUncompressed then
begin
// 单层 try-finally,杜绝多层乱跳
try
SiMain.LogMessage(Format('尝试打开Excel[xmcode=%s]: %s', [MemMasterxmcode.AsString, tempfile]));
WB := ExcelApp.WorkBooks.Open(tempfile);
isopen := True;
SiMain.LogMessage(Format('打开成功[xmcode=%s]: %s', [MemMasterxmcode.AsString, tempfile]));
if isopen then
begin
WB.WorkSheets[2].Activate;
RangeCount := 0;
UsedRange := WB.WorkSheets[2].UsedRange;
ExcelApp.FindFormat.Interior.Color := 65535;
FoundRange := UsedRange.Find('*', EmptyParam, -4163, 1, 1, 1, False, False, True);
//FoundRange.select;
while True do
begin
if VarIsError(FoundRange) or (Pointer(IDispatch(FoundRange)) = nil) then
Break;
if ProcessedAddr.IndexOf(FoundRange.Address) <> -1 then
begin
SiMain.LogMessage(Format('重复遍历[xmcode=%s]: %s', [MemMasterxmcode.AsString, FoundRange.Address]));
Break;
end;
ProcessedAddr.Add(FoundRange.Address);
Inc(RangeCount);
if VarIsError(FoundRange.Value) then
temp := ''
else
temp := VarToStr(FoundRange.Value);
if temp <> '' then
FoundRange.Value := '';
FoundRange := UsedRange.FindNext(FoundRange);
end;
isFound := RangeCount > 0;
SiMain.LogMessage('WB.保存前;');
WB.Save;
SiMain.LogMessage('WB.Save;');
WB.Close(False);
SiMain.LogMessage('WB.Close(False);');
WB := UnAssigned;
SiMain.LogMessage('WB := UnAssigned;');
// ExcelApp.ActiveWorkBook.Save;
// ExcelApp.WorkBooks.Close;
SiMain.LogMessage('保存前');
CompressBlobFieldFile(CdsDetail.FieldByName('wj_noyellow') as TBlobField, tempfile);
SiMain.LogMessage('保存后');
CdsDetail.FieldByName('castTime').AsString := Option.User.UserName + '#';
if isFound then
CdsDetail.FieldByName('RangeCount').AsInteger := RangeCount
else
CdsDetail.FieldByName('RangeCount').AsInteger := -1;
ActSave.Execute;
end;
finally
// 仅保留必须的资源释放,无冗余
if not VarIsEmpty(FoundRange) then FoundRange := UnAssigned;
if not VarIsEmpty(UsedRange) then UsedRange := UnAssigned;
开始
指定开始删除和插入整数值的位置。 如果 start 为负或为零,则返回一个 Null 字符串。 如果起始长度超过第一个character_expression,则返回一个空字符串。 开始可以是双角型。
长度
指定要删除多少字符的整数。 如果长度为负,则返回一个空字符串。 如果长度超过第一个character_expression,则删除过程继续到最后一个character_expression的最后一个字符。 如果长度为零,插入将在起始位置进行,且不删除任何字符。 长度可以是bigint类型。
replace_with_expression
字符数据表达式。 replace_with_expression可以是常量、变量,或字符或二进制数据的行。 该表达式取代了从起点开始的character_expression长度特征。 作为一个replace_with_expression,删除该角色且不插入任何内容。NULL
返回类型
如果character_expression是支持的字符数据类型之一,则会返回字符数据。 如果character_expression是支持的二进制数据类型之一,则返回二进制数据。
注释
如果起始位置或长度为负,或者起始位置长于第一弦的长度,则返回一个空弦。 如果起始位置为0,则返回空值。 如果删除长度大于第一串,则会将其删除到剩余第一串的第一个字符。
如果生成值超过返回类型的最大支持值,则会抛出错误。
可兼职时间
可兼职地点
0条评论 雇主评价