From 73dccaebc1a651eda52ad7c11161d3ebeffbcb92 Mon Sep 17 00:00:00 2001 From: Toby Allen Date: Wed, 21 Dec 2022 11:16:01 +0000 Subject: [PATCH 01/15] one1 --- src/ExcelUtils.pas | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/ExcelUtils.pas b/src/ExcelUtils.pas index e32d5f90..2b98f3ec 100644 --- a/src/ExcelUtils.pas +++ b/src/ExcelUtils.pas @@ -88,7 +88,9 @@ function TExcelXLSConverter.ExecuteConversion(fileToConvert: String; OutputFilen var NonsensePassword :OleVariant; FromPage, ToPage : OleVariant; + activeSheet : OleVariant; ExitAction :TExitAction; + Sheet : integer; begin //Excel is particuarily sensitive to having \\ at end of filename, eg it won't create file. //so we remove any double \\ @@ -196,7 +198,24 @@ function TExcelXLSConverter.ExecuteConversion(fileToConvert: String; OutputFilen begin //CSV pops up alert. must be hidden for automation ExcelApp.Application.DisplayAlerts := False ; - ExcelApp.activeWorkbook.SaveAs( OutputFilename, OutputFileFormat); + + +(* + For Each xWs In Application.ActiveWorkbook.Worksheets + xWs.Copy + xcsvFile = CurDir & "\" & xWs.Name & ".csv" + Application.ActiveWorkbook.SaveAs Filename: = xcsvFile, _ + FileFormat: = xlCSV, CreateBackup: = False + Application.ActiveWorkbook.Saved = True + Application.ActiveWorkbook.Close + Next*) + for Sheet := 0 to ExcelApp.Application.ActiveWorkbook.WorkSheets.Count() -1 do + begin + activeSheet := ExcelApp.Application.ActiveWorkbook.WorkSheets[Sheet]; + activeSheet.SaveAs( OutputFilename + inttostr(Sheet), OutputFileFormat); + end; + + ExcelApp.ActiveWorkBook.save; end else From 01ad68804a6ff530c978c4dc21b872bc9386992e Mon Sep 17 00:00:00 2001 From: Toby Allen Date: Wed, 21 Dec 2022 16:27:42 +0000 Subject: [PATCH 02/15] output multisheets to multiple files --- src/ExcelUtils.pas | 17 ++++++++++++++--- src/MainUtils.pas | 12 +++++++++++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/ExcelUtils.pas b/src/ExcelUtils.pas index 2b98f3ec..7a6d4b26 100644 --- a/src/ExcelUtils.pas +++ b/src/ExcelUtils.pas @@ -89,6 +89,7 @@ function TExcelXLSConverter.ExecuteConversion(fileToConvert: String; OutputFilen NonsensePassword :OleVariant; FromPage, ToPage : OleVariant; activeSheet : OleVariant; + dynamicoutputDir, dynamicoutputFile, dynamicoutputExt, dynamicOutputFileName, dynamicSheetName : String; ExitAction :TExitAction; Sheet : integer; begin @@ -209,10 +210,20 @@ function TExcelXLSConverter.ExecuteConversion(fileToConvert: String; OutputFilen Application.ActiveWorkbook.Saved = True Application.ActiveWorkbook.Close Next*) - for Sheet := 0 to ExcelApp.Application.ActiveWorkbook.WorkSheets.Count() -1 do + dynamicoutputDir := ExtractFilePath(OutputFilename); // includes last \ + dynamicoutputFile := ChangefileExt ( ExtractFileName(OutputFilename),''); + dynamicoutputExt := ExtractFileExt(OutputFilename); + + for Sheet := 1 to ExcelApp.ActiveWorkbook.WorkSheets.Count do begin - activeSheet := ExcelApp.Application.ActiveWorkbook.WorkSheets[Sheet]; - activeSheet.SaveAs( OutputFilename + inttostr(Sheet), OutputFileFormat); + activeSheet := ExcelApp.ActiveWorkbook.Sheets[Sheet]; + dynamicSheetName := activeSheet.Name; + LogDebug(dynamicSheetName); + dynamicSheetName := SafeFileName(dynamicSheetName); + dynamicOutputFilename := dynamicoutputDir + dynamicoutputFile + '_(' + inttostr(Sheet) + dynamicSheetName + ')' + dynamicoutputExt; + LogDebug(dynamicOutputFileName); + + activeSheet.SaveAs( dynamicoutputFilename, OutputFileFormat); end; diff --git a/src/MainUtils.pas b/src/MainUtils.pas index 76155b7e..a75bc4d7 100644 --- a/src/MainUtils.pas +++ b/src/MainUtils.pas @@ -217,6 +217,7 @@ TDocumentConverter = class // Check Should Ignore function CheckShouldIgnore(DocumentPath : String): Boolean; + function SafeFileName(FileName: String ) : String; public @@ -648,7 +649,8 @@ function TDocumentConverter.Execute: string; try StartTime := GettickCount(); - logdebug('Executing Conversion ... ',VERBOSE); + logdebug('Executing Conversion ... ',VERBOSE); + ConversionInfo := ExecuteConversion(FileToConvert, FileToCreate, OutputFileFormat); if ConversionInfo.Successful then @@ -1584,6 +1586,14 @@ procedure TDocumentConverter.WriteOfficeAppVersion(Version: String); LogDebug('Writing Version to File:' + ConfigFileName,VERBOSE); end; +function TDocumentConverter.SafeFileName(FileName: String): String; +begin + Filename := StringReplace(Filename,'&','_',[rfReplaceAll,rfIgnoreCase]); + Filename := StringReplace(Filename,'/','_',[rfReplaceAll,rfIgnoreCase]); + Filename := StringReplace(Filename,'\\','_',[rfReplaceAll,rfIgnoreCase]); + result := Filename; +end; + procedure TDocumentConverter.SetBitmapMissingFonts(const Value: boolean); begin FBitmapMissingFonts := Value; From 8ebabf338a80cd2720d18c4ea1530e35fad80b4d Mon Sep 17 00:00:00 2001 From: Toby Allen Date: Wed, 21 Dec 2022 16:27:48 +0000 Subject: [PATCH 03/15] version --- src/MainUtils.pas | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/MainUtils.pas b/src/MainUtils.pas index a75bc4d7..36ecf7f3 100644 --- a/src/MainUtils.pas +++ b/src/MainUtils.pas @@ -33,8 +33,8 @@ interface MSVISIO = 4; - DOCTO_VERSION = '1.9.40'; // dont use 0x - choco needs incrementing versions. - DOCTO_VERSION_NOTE = ' (Test Version) '; + DOCTO_VERSION = '2.0.41'; // dont use 0x - choco needs incrementing versions. + DOCTO_VERSION_NOTE = ' (Test Version XLS Multisheet) '; type From 5b1c93c8e67221204db5affa5d63ae24df5190cd Mon Sep 17 00:00:00 2001 From: Toby Allen Date: Wed, 21 Dec 2022 16:28:22 +0000 Subject: [PATCH 04/15] config --- src/docto.dproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/docto.dproj b/src/docto.dproj index dbb818c3..b8a068d8 100644 --- a/src/docto.dproj +++ b/src/docto.dproj @@ -208,7 +208,7 @@ 1 - -VS -f "..\test\inputfilesvs/payslips.vsdx" -o "..\test\generatedfiles\" -t vsPDF -l 10 + -XL -f "C:\Development\github\docto\test\inputfilesxl\Week 1 Test.xls" -o "C:\Development\github\docto\test\GeneratedFiles" -T xlCSV -l 10 63 false true @@ -356,13 +356,13 @@ true - + .\ true - + .\ true From d0d0a8ce825217be21851cb8528d26a394e71d78 Mon Sep 17 00:00:00 2001 From: Toby Allen Date: Thu, 1 Jun 2023 20:00:03 +0100 Subject: [PATCH 05/15] update --- src/ExtraFiles.res | Bin 349676 -> 349788 bytes test/inputfilesxl/Week 1 Test.xls | Bin 53760 -> 35840 bytes test/inputfilesxl/wk1test.xls | Bin 0 -> 53760 bytes test/testxlsfile.bat | 2 +- 4 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 test/inputfilesxl/wk1test.xls diff --git a/src/ExtraFiles.res b/src/ExtraFiles.res index 11b8eadce3eb4af4de9e525ff7694654f66edb7d..4a9a4c492d7bcd850064665f254ece82fe0386af 100644 GIT binary patch delta 157 zcmaE}TJ+8u(G4qvS=Wj&Fz8G+)Dzu&NZ5fnTQ@VWptK|{Gp8iAh?h$N4BWsx1t67L ztWc7#09K->5Kxp~kXlqysil{apR7=xnUkZCn^=;Z0hcfYN$9{#fhjivD^D#+ZvHFQ W{#T3ZwCOI(Kjjp delta 49 zcmcb!M)b{U(G4qvS#8A_7<48t)Dzu&NZ5h7xk$XdNSqOfnShuXh*`E5iL<`40|2u# B5Iz6^ diff --git a/test/inputfilesxl/Week 1 Test.xls b/test/inputfilesxl/Week 1 Test.xls index a10f1d6c4a00c5be9182aa0f7c2eaa63a65153ea..fc48dda99c133cac21c1a8a245ce47b43481b1c4 100644 GIT binary patch delta 1681 zcmeHH&ubG=5T3W$#x}M!V%1=ywt7;mCT*(KP&LUWrKN3RvXzQh+%`{Ly6(o!Mr=h= z5K*dN>k|wf#6$5U@kb7N5Rck|)Oaj-@FFOv^x#RwI-5jO3;GY}!o2s*eDlrhz8&7! zlw~Z#O}L0K>8|Gk0Px_zJ;D~qmKqy?s11%Z_!Nbz%*_q440n+LYp|?evW^xa8O!>^ zP(gg4gA5WV;D&WD4+Iv{PdF@$wv?UzE9)SOwam_!`*tHH>`jHkRs|EJP`v2YmEAn= zuz8@=ny@_Ih>|?NrkaDbE=?EpCu;OimWkFc5Z{j6b+%zfh7 zk&G8`!+#_e6~2@!~1t{8Sy%aoxO^#Lb*RT@68ef+tL}-$9lvrQ)q`v z`Ro#I*^tLKxkRs0DEVr$N9BAI6$7DxiN3D|V`h zl;M|E@b!sdhz4UqcQ^E@vQCpG3hQZ^s)l69nhKF{RE+vMMF?n$A{i9Ip%C=YxGaey z2?`NiRt>5P^q7=V4CvAZqx3Y@lT=706ndtRjX_aUsUDL~7v&g;4a*6?BB{d>={QXm z(xNn}DXBu!bg!nLloW_a36#mB6uN_=7>q)xYHzqVh$Jc_$e*Cpz%MiXupXy6gmg_c zM9nV^4TE3Ph85(^*ETc!S|P=B@ryLQM~hSF(4~>&kfhMkk7AYH`bsA{2R%X$a}U%p z?XER6H-0BKpB=4z_;lLN zf5)4Ky_j_t!G~EVyZ%y{JbL9?URicqR_3r0OXe?d7RtWlM@b7yy-HVm&C+&r0r&xN CPP*p+ delta 1812 zcmeH{U2Ka{7{{OI?PxM2L?IACaj`;Z7!8^okpauR9?m?gaHe?>kx~5*OmeX@BQD=bY!`oaa1w8Mbmc zwNncFzrk+-mg8?&xoKy_{_;Jt7mg2J(=6ZuL4H)X#=*>M*wQWwkYTOllpIyw0T=A1dI=A8ZjJE4~@Q>kMQ} zQX*e2wJEQaHnpwd#cha}?6oaipk3@q-d+63GX6ya(ZeG|dB-uvx}^yO44NA&Pu zB1a0{E5gAw6`1cBObB^H_h3lg(BH81=(E_7d=Z>3Mf%yrk&LF&ZwcjEb*C<+HX6Z}+$LuUca0=Tfk8Y=HjO~Nr&PEsdc z`122{3(Rw#l^@DhnP(0147ajXjiaP49EGQEe^i?6Y0Q&{_K94T0;8dnSYFWmZdUEv z8Z%Bvqj?;~ zQcx3&Y#~;SBRi4HY@9=VeSJ`IY34N@Y=_!Yv7BDov5aT6D5rac3^d!4-2s20cJC_6 zd6sxE+t3neZ|i7l?(_w_B2BHd3TyN#)Nr-xF&pyR6%VSK?i+Ia=xeo}d=@Ko z<8vWyb&Yz&BIwIUiRnUD!kfhO?lll9KoC@dDzFx;1Jz(Xr~w5SkG cvZME;w&1}D~Z?; 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 literal 0 HcmV?d00001 diff --git a/test/testxlsfile.bat b/test/testxlsfile.bat index 95b42227..b1eafdcc 100644 --- a/test/testxlsfile.bat +++ b/test/testxlsfile.bat @@ -1,2 +1,2 @@ REM Load csv files convert to xls -"../exe/docto.exe" -XL -f "C:\dev\github\docto\test\inputfilesxl\Week 1 Test.xls" -o "C:\dev\github\docto\test\GeneratedFiles" -T xlPDF -l 10 \ No newline at end of file +"../exe/docto.exe" -XL -f "C:\Development\github\docto\test\inputfilesxl\Week 1 Test.xls" -o "C:\Development\github\docto\test\GeneratedFiles" -T xlPDF -l 10 \ No newline at end of file From 24481b04dfc3f646ab8b0cd6e18bcdc93d79079d Mon Sep 17 00:00:00 2001 From: Toby Allen Date: Sun, 22 Jun 2025 10:52:51 +0100 Subject: [PATCH 06/15] Move To sub methods --- src/ExcelUtils.pas | 103 +++++++++++++++++++++++++++++++-------------- 1 file changed, 72 insertions(+), 31 deletions(-) diff --git a/src/ExcelUtils.pas b/src/ExcelUtils.pas index 44246b0e..9b957164 100644 --- a/src/ExcelUtils.pas +++ b/src/ExcelUtils.pas @@ -22,6 +22,8 @@ interface Private ExcelApp : OleVariant; FExcelVersion : String; + function SingleFileExecuteConversion(fileToConvert, OutputFilename: String; OutputFileFormat: Integer): TConversionInfo; + procedure SaveAsPDF(OutputFilename : string) ; public constructor Create() ; @@ -101,6 +103,7 @@ function TExcelXLSConverter.ExecuteConversion(fileToConvert: String; OutputFilen Result.InputFile := fileToConvert; Result.Successful := false; NonsensePassword := 'tfm554!ghAGWRDD'; + LogDebug('in conversion file'); try ExcelApp.Workbooks.Open( FileToConvert, //FileName , EmptyParam, //UpdateLinks , @@ -158,38 +161,35 @@ function TExcelXLSConverter.ExecuteConversion(fileToConvert: String; OutputFilen aSave: // Go ahead and save begin + Result := SingleFileExecuteConversion(fileToConvert, OutputFilename, OutputFileFormat); + end; + end; - //Unlike Word, in Excel you must call a different function to save a pdf and XPS. - if OutputFileFormat = xlTypePDF then - begin - if pdfPrintToPage > 0 then - begin - logdebug('PrintFromPage: ' + inttostr(pdfPrintFromPage),debug); - logdebug('PrintToPage: ' + inttostr(pdfPrintToPage),debug); +end; - FromPage := pdfPrintFromPage; - ToPage := pdfPrintToPage; - end else - begin - FromPage := EmptyParam; - ToPage := EmptyParam; - end ; +//Useful Links: +// https://docs.microsoft.com/en-us/office/vba/api/excel.workbooks.open +// https://docs.microsoft.com/en-us/office/vba/api/excel.workbook.exportasfixedformat - ExcelApp.Application.DisplayAlerts := False ; - ExcelApp.activeWorkbook.ExportAsFixedFormat(XlFixedFormatType_xlTypePDF, - OutputFilename, - EmptyParam, //Quality - IncludeDocProps, // IncludeDocProperties, - False,// IgnorePrintAreas, - FromPage , // From, - ToPage, // To, - pdfOpenAfterExport, // OpenAfterPublish, (default false); - EmptyParam// FixedFormatExtClassPtr - ) ; +function TExcelXLSConverter.SingleFileExecuteConversion(fileToConvert: String; OutputFilename: String; OutputFileFormat : Integer): TConversionInfo; +var + NonsensePassword :OleVariant; + FromPage, ToPage : OleVariant; + activeSheet : OleVariant; + dynamicoutputDir, dynamicoutputFile, dynamicoutputExt, dynamicOutputFileName, dynamicSheetName : String; + ExitAction :TExitAction; + Sheet : integer; +begin - ExcelApp.ActiveWorkBook.Saved := True + logdebug('SingleFileExecuteConversion',VERBOSE); + + //Unlike Word, in Excel you must call a different function to save a pdf and XPS. + if OutputFileFormat = xlTypePDF then + begin + + SaveAsPDF(OutputFilename); end @@ -201,6 +201,9 @@ function TExcelXLSConverter.ExecuteConversion(fileToConvert: String; OutputFilen end else if OutputFileFormat = xlCSV then begin + + LogDebug('output to csv format'); + //CSV pops up alert. must be hidden for automation ExcelApp.Application.DisplayAlerts := False ; @@ -214,17 +217,20 @@ function TExcelXLSConverter.ExecuteConversion(fileToConvert: String; OutputFilen Application.ActiveWorkbook.Saved = True Application.ActiveWorkbook.Close Next*) - dynamicoutputDir := ExtractFilePath(OutputFilename); // includes last \ + dynamicoutputDir := ExtractFilePath(OutputFilename); // includes last \ dynamicoutputFile := ChangefileExt ( ExtractFileName(OutputFilename),''); dynamicoutputExt := ExtractFileExt(OutputFilename); for Sheet := 1 to ExcelApp.ActiveWorkbook.WorkSheets.Count do begin - activeSheet := ExcelApp.ActiveWorkbook.Sheets[Sheet]; + activeSheet := ExcelApp.ActiveWorkbook.Sheets[Sheet]; dynamicSheetName := activeSheet.Name; + LogDebug(dynamicSheetName); + dynamicSheetName := SafeFileName(dynamicSheetName); dynamicOutputFilename := dynamicoutputDir + dynamicoutputFile + '_(' + inttostr(Sheet) + dynamicSheetName + ')' + dynamicoutputExt; + LogDebug(dynamicOutputFileName); activeSheet.SaveAs( dynamicoutputFilename, OutputFileFormat); @@ -234,7 +240,7 @@ function TExcelXLSConverter.ExecuteConversion(fileToConvert: String; OutputFilen ExcelApp.ActiveWorkBook.save; //ExcelApp.activeWorkbook.SaveAs( OutputFilename, OutputFileFormat); - //ExcelApp.ActiveWorkBook.saved := true; + //ExcelApp.ActiveWorkBook.saved := true; end else begin @@ -250,8 +256,6 @@ function TExcelXLSConverter.ExecuteConversion(fileToConvert: String; OutputFilen Result.OutputFile := OutputFilename; ExcelApp.ActiveWorkbook.Close(); - end; - end; end; @@ -277,4 +281,41 @@ function TExcelXLSConverter.OfficeAppVersion(): String; result := FExcelVersion; end; + +procedure TExcelXLSConverter.SaveAsPDF(OutputFilename : string) ; +var + + FromPage, ToPage : OleVariant; + +begin + + if pdfPrintToPage > 0 then + begin + logdebug('PrintFromPage: ' + inttostr(pdfPrintFromPage),debug); + logdebug('PrintToPage: ' + inttostr(pdfPrintToPage),debug); + + FromPage := pdfPrintFromPage; + ToPage := pdfPrintToPage; + + end else + begin + FromPage := EmptyParam; + ToPage := EmptyParam; + end ; + + ExcelApp.Application.DisplayAlerts := False ; + ExcelApp.activeWorkbook.ExportAsFixedFormat(XlFixedFormatType_xlTypePDF, + OutputFilename, + EmptyParam, // Quality + IncludeDocProps, // IncludeDocProperties, + False, // IgnorePrintAreas, + FromPage , // From, + ToPage, // To, + pdfOpenAfterExport, // OpenAfterPublish, (default false); + EmptyParam // FixedFormatExtClassPtr + ) ; + + ExcelApp.ActiveWorkBook.Saved := True +end; + end. From 7e9a34444d78b0eaa15bbc515ce0b5426f87789e Mon Sep 17 00:00:00 2001 From: Toby Allen Date: Sun, 22 Jun 2025 10:52:59 +0100 Subject: [PATCH 07/15] ver --- src/MainUtils.pas | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/MainUtils.pas b/src/MainUtils.pas index 1e3d54ab..691e71d0 100644 --- a/src/MainUtils.pas +++ b/src/MainUtils.pas @@ -33,8 +33,8 @@ interface MSVISIO = 4; - DOCTO_VERSION = '2.0.41'; // dont use 0x - choco needs incrementing versions. - DOCTO_VERSION_NOTE = ' (Test Version XLS Multisheet) '; + DOCTO_VERSION = '2.0.42'; // dont use 0x - choco needs incrementing versions. + DOCTO_VERSION_NOTE = ' (Test Version XLS Multisheet B) '; type From 7e5f12171418ffc1fa1c3558ef396d23c6a2af43 Mon Sep 17 00:00:00 2001 From: Toby Allen Date: Sun, 22 Jun 2025 10:53:12 +0100 Subject: [PATCH 08/15] new t est file with multiple sheets --- test/inputfilesxl/wk1test-MultiSheet.xls | Bin 0 -> 61952 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/inputfilesxl/wk1test-MultiSheet.xls diff --git a/test/inputfilesxl/wk1test-MultiSheet.xls b/test/inputfilesxl/wk1test-MultiSheet.xls new file mode 100644 index 0000000000000000000000000000000000000000..8149bd1a00386e0f0954423c3a0e0245791318de GIT binary patch literal 61952 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 literal 0 HcmV?d00001 From a1ea1cfd02d6ff94dae216c0daba0625e96114b0 Mon Sep 17 00:00:00 2001 From: Toby Allen Date: Sun, 22 Jun 2025 10:58:43 +0100 Subject: [PATCH 09/15] add xps --- src/ExcelUtils.pas | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/ExcelUtils.pas b/src/ExcelUtils.pas index 9b957164..f5580538 100644 --- a/src/ExcelUtils.pas +++ b/src/ExcelUtils.pas @@ -24,6 +24,7 @@ interface FExcelVersion : String; function SingleFileExecuteConversion(fileToConvert, OutputFilename: String; OutputFileFormat: Integer): TConversionInfo; procedure SaveAsPDF(OutputFilename : string) ; + procedure SaveAsXPS(OutputFilename: string); public constructor Create() ; @@ -195,9 +196,7 @@ function TExcelXLSConverter.SingleFileExecuteConversion(fileToConvert: String; O end else if OutputFileFormat = xlTypeXPS then begin - ExcelApp.Application.DisplayAlerts := False ; - ExcelApp.activeWorkbook.ExportAsFixedFormat(XlFixedFormatType_xlTypeXPS, OutputFilename ); - ExcelApp.ActiveWorkBook.save; + SaveAsXPS(OutputFilename); end else if OutputFileFormat = xlCSV then begin @@ -318,4 +317,13 @@ procedure TExcelXLSConverter.SaveAsPDF(OutputFilename : string) ; ExcelApp.ActiveWorkBook.Saved := True end; + +procedure TExcelXLSConverter.SaveAsXPS(OutputFilename : string) ; +begin + + ExcelApp.Application.DisplayAlerts := False ; + ExcelApp.activeWorkbook.ExportAsFixedFormat(XlFixedFormatType_xlTypeXPS, OutputFilename ); + ExcelApp.ActiveWorkBook.save; +end; + end. From 44b7f42c17dc9e83f8c49bcae3d1087aae0f150a Mon Sep 17 00:00:00 2001 From: Toby Allen Date: Sun, 22 Jun 2025 17:59:46 +0100 Subject: [PATCH 10/15] Move csv --- src/ExcelUtils.pas | 128 ++++++++++++----------- test/inputfilesxl/wk1test-MultiSheet.xls | Bin 61952 -> 55296 bytes 2 files changed, 68 insertions(+), 60 deletions(-) diff --git a/src/ExcelUtils.pas b/src/ExcelUtils.pas index f5580538..5a978156 100644 --- a/src/ExcelUtils.pas +++ b/src/ExcelUtils.pas @@ -201,45 +201,15 @@ function TExcelXLSConverter.SingleFileExecuteConversion(fileToConvert: String; O else if OutputFileFormat = xlCSV then begin - LogDebug('output to csv format'); - //CSV pops up alert. must be hidden for automation - ExcelApp.Application.DisplayAlerts := False ; - - -(* - For Each xWs In Application.ActiveWorkbook.Worksheets - xWs.Copy - xcsvFile = CurDir & "\" & xWs.Name & ".csv" - Application.ActiveWorkbook.SaveAs Filename: = xcsvFile, _ - FileFormat: = xlCSV, CreateBackup: = False - Application.ActiveWorkbook.Saved = True - Application.ActiveWorkbook.Close - Next*) - dynamicoutputDir := ExtractFilePath(OutputFilename); // includes last \ - dynamicoutputFile := ChangefileExt ( ExtractFileName(OutputFilename),''); - dynamicoutputExt := ExtractFileExt(OutputFilename); - - for Sheet := 1 to ExcelApp.ActiveWorkbook.WorkSheets.Count do - begin - activeSheet := ExcelApp.ActiveWorkbook.Sheets[Sheet]; - dynamicSheetName := activeSheet.Name; - LogDebug(dynamicSheetName); + // to get sheets + // Sheets(Array("Sheet4", "Sheet5")) or Sheets(3) or Sheets(Array(1,2)) - dynamicSheetName := SafeFileName(dynamicSheetName); - dynamicOutputFilename := dynamicoutputDir + dynamicoutputFile + '_(' + inttostr(Sheet) + dynamicSheetName + ')' + dynamicoutputExt; - LogDebug(dynamicOutputFileName); - activeSheet.SaveAs( dynamicoutputFilename, OutputFileFormat); - end; - - - ExcelApp.ActiveWorkBook.save; - - //ExcelApp.activeWorkbook.SaveAs( OutputFilename, OutputFileFormat); - //ExcelApp.ActiveWorkBook.saved := true; + ExcelApp.activeWorkbook.SaveAs( OutputFilename, OutputFileFormat); + ExcelApp.ActiveWorkBook.saved := true; end else begin @@ -288,41 +258,79 @@ procedure TExcelXLSConverter.SaveAsPDF(OutputFilename : string) ; begin - if pdfPrintToPage > 0 then - begin - logdebug('PrintFromPage: ' + inttostr(pdfPrintFromPage),debug); - logdebug('PrintToPage: ' + inttostr(pdfPrintToPage),debug); + if pdfPrintToPage > 0 then + begin + logdebug('PrintFromPage: ' + inttostr(pdfPrintFromPage),debug); + logdebug('PrintToPage: ' + inttostr(pdfPrintToPage),debug); + + FromPage := pdfPrintFromPage; + ToPage := pdfPrintToPage; + + end else + begin + FromPage := EmptyParam; + ToPage := EmptyParam; + end ; + + ExcelApp.Application.DisplayAlerts := False ; + ExcelApp.activeWorkbook.ExportAsFixedFormat(XlFixedFormatType_xlTypePDF, + OutputFilename, + EmptyParam, // Quality + IncludeDocProps, // IncludeDocProperties, + False, // IgnorePrintAreas, + FromPage , // From, + ToPage, // To, + pdfOpenAfterExport, // OpenAfterPublish, (default false); + EmptyParam // FixedFormatExtClassPtr + ) ; + + ExcelApp.ActiveWorkBook.Saved := True +end; - FromPage := pdfPrintFromPage; - ToPage := pdfPrintToPage; - end else - begin - FromPage := EmptyParam; - ToPage := EmptyParam; - end ; +procedure TExcelXLSConverter.SaveAsXPS(OutputFilename : string) ; +begin ExcelApp.Application.DisplayAlerts := False ; - ExcelApp.activeWorkbook.ExportAsFixedFormat(XlFixedFormatType_xlTypePDF, - OutputFilename, - EmptyParam, // Quality - IncludeDocProps, // IncludeDocProperties, - False, // IgnorePrintAreas, - FromPage , // From, - ToPage, // To, - pdfOpenAfterExport, // OpenAfterPublish, (default false); - EmptyParam // FixedFormatExtClassPtr - ) ; - - ExcelApp.ActiveWorkBook.Saved := True + ExcelApp.activeWorkbook.ExportAsFixedFormat(XlFixedFormatType_xlTypeXPS, OutputFilename ); + ExcelApp.ActiveWorkBook.save; end; - -procedure TExcelXLSConverter.SaveAsXPS(OutputFilename : string) ; +procedure TExcelXLSConverter.SaveAsCSV(OutputFilename: string); +var + FromPage, ToPage : OleVariant; + activeSheet : OleVariant; + dynamicoutputDir, dynamicoutputFile, dynamicoutputExt, dynamicOutputFileName, dynamicSheetName : String; + ExitAction :TExitAction; + Sheet : integer; begin + LogDebug('output to csv format'); + //CSV pops up alert. must be hidden for automation ExcelApp.Application.DisplayAlerts := False ; - ExcelApp.activeWorkbook.ExportAsFixedFormat(XlFixedFormatType_xlTypeXPS, OutputFilename ); + + + + dynamicoutputDir := ExtractFilePath(OutputFilename); // includes last \ + dynamicoutputFile := ChangefileExt ( ExtractFileName(OutputFilename),''); + dynamicoutputExt := ExtractFileExt(OutputFilename); + + for Sheet := 1 to ExcelApp.ActiveWorkbook.WorkSheets.Count do + begin + activeSheet := ExcelApp.ActiveWorkbook.Sheets[Sheet]; + dynamicSheetName := activeSheet.Name; + + LogDebug(dynamicSheetName); + + dynamicSheetName := SafeFileName(dynamicSheetName); + dynamicOutputFilename := dynamicoutputDir + dynamicoutputFile + '_(' + inttostr(Sheet) + dynamicSheetName + ')' + dynamicoutputExt; + + LogDebug(dynamicOutputFileName); + + activeSheet.SaveAs( dynamicoutputFilename, OutputFileFormat); + end; + + ExcelApp.ActiveWorkBook.save; end; diff --git a/test/inputfilesxl/wk1test-MultiSheet.xls b/test/inputfilesxl/wk1test-MultiSheet.xls index 8149bd1a00386e0f0954423c3a0e0245791318de..bcd9766112d23e20243b0dfc6ae2e1bf801c513b 100644 GIT binary patch delta 2314 zcmeHGO-vI}5S}fi5?WwaOQFTqHc>oys1V};f>93`q6g5Jh#;jx3mO$o5TsPLXv73P z2v6alC=xkfRHzR_ywoN}6B8xTaMBo2@n|ejFD6>&b^Ehz*%%JSi*GXR+izxP=6(A; z-$I6OD&x{d?(jfKk@^q-_-iIP8s;1-GO8(~_3G^^`dVYth`AX19<~BZZWj%F2)7b5M=jH2}d#6+<$vjo}3e+=^RdSIRFS?YzCD zFcyu^B+1Sg!{?w8x2D)zCNjs{xgw$#?4(I3G@286PJk`(X)Lr^Sf9B;2Rh)u3Xp|) zktH?HNykZ_VX@Ggr3Y_3m%VTXynT<~(?UC|l_tYJ#2;32`0n{;At zK&#p50(jR&d}aH{6K5saR$k3 zL*3J;nswIzCZ-g4qK=tY94c%rD(Sz%7=IpA*l~^;o?E!V*`V2Xf9gfu$2Z(oBnUoN zJlo-VD($PPX6xwN*|XM)U*T|gKSt}&>(LLOH=sMv8_`+(ApSR@H>2Zi2RC{PdMkPP o#XiuuX)tsobN)li&@pl%bY9iwCqF_Su9lo!6m?EaLoG(uZ$<&@ga7~l delta 2922 zcmd^9T})g>6h3qJvMhhQ_ga=;DR)h=wb(2mQCcWq3$0BWTO`EN)&d3kqex4og;I2v zs?jJ9$e1EnK%*w6{K~$>kD1D3|Cz**$h&B5Z$$G@<|o zqRFG$EG5%Q{u2xSk_G>%1^;$5?~7Xaa0hP#)+T>BEEqdg zA8T%IFL;@pv^}6d@o;UD@2oJ;IEfwF=J6u;3H$1hfdv5Q6uA0K^dhoosd>F~y_8f~B&s-|s}hn`Ol zAQaJ-RC92+tI_~0HsQS9gsI(VQsO|GuoUcuW+ z_V)*6?rl`?(Y=i~86@jioc?nlQ(_A2Pcj?+f8gq*P4M$5oucEo6D@qKxC~R`i2Qy( z41K(+^g;d4zzkzDY`Lx)YNd8)+o^?`sR=%M)I8dPxT64N7QDp30VKC3-H4>rErKps z-XZmxpgB=+0{Pmw<&iT^Q~;xtlViWm|xH<;&SqJ<|iCW6Pt zv$5B);?3J)VZhFoe#GxWhe+)ZUgkoJvC9U{jLRd8t?PH);(JRsAsglKW}HS^*RUp} zwNjE9Qigo&j*HIbW;=6GZ*MOoiITa|I2H@pj9fy$#Dd1z+QL~bl=Xj)6iGHe-QWL? z`!0PbA9i`9_~{X%^eaTedib$avVL{pA(N8P>U?Dv$y%%j-{9`0Xor`->Gw5jBRoH=+dH z8+McxRe}^+8?HQy73jN{R5hvsc@WcTDv-I12eo^#0(r2^QXidq`2{A~Yp)VrzqYER z<`_xM9r=MVKc62>y=(8~NyhsIO1Y-ba(~IU{eg)r`n9V5(#|PXF6zebTd(bG{@NJ( zCH3}h{d(X<%~uP{e&7Ib5O@kW1k?fbKm%|XXarE Date: Sun, 22 Jun 2025 17:59:59 +0100 Subject: [PATCH 11/15] add param --- src/MainUtils.pas | 10 ++++++++++ src/res/HelpLog.txt | 6 +++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/MainUtils.pas b/src/MainUtils.pas index 691e71d0..b5cd9df2 100644 --- a/src/MainUtils.pas +++ b/src/MainUtils.pas @@ -71,6 +71,7 @@ TDocumentConverter = class FKeepIRM: boolean; FDocStructureTags: boolean; FBitmapMissingFonts: boolean; + Fsheets: TStrings; procedure SetCompatibilityMode(const Value: Integer); @@ -95,6 +96,7 @@ TDocumentConverter = class procedure SetKeepIRM(const Value: boolean); procedure SetDocStructureTags(const Value: boolean); procedure SetBitmapMissingFonts(const Value: boolean); + procedure Setsheets(const Value: TStrings); protected @@ -184,6 +186,7 @@ TDocumentConverter = class property pdfPrintToPage : integer read FpdfPrintToPage; property useISO190051 : boolean read FuseISO190051; property pdfOptimizeFor : integer read fpdfOptimizeFor write fpdfOptimizeFor; + property sheets : TStrings read Fsheets write Setsheets; property ExportMarkup : integer read fExportMarkup; property IncludeDocProps : boolean read FIncludeDocProps write SetIncludeDocProps; @@ -519,6 +522,7 @@ constructor TDocumentConverter.Create; FBitmapMissingFonts := true; FInputFiles := TStringList.Create; fDontUseAutoVBA := true; + fSheets := TStringList.Create; end; @@ -540,6 +544,7 @@ destructor TDocumentConverter.Destroy; FInputFiles.Free; + fSheets.Free; if assigned(FNetHandle) then begin @@ -1860,6 +1865,11 @@ procedure TDocumentConverter.SetRemoveFileOnConvert(const Value: boolean); +procedure TDocumentConverter.Setsheets(const Value: TStrings); +begin + Fsheets := Value; +end; + procedure TDocumentConverter.SetSkipDocsWithTOC(const Value: Boolean); begin FSkipDocsWithTOC := Value; diff --git a/src/res/HelpLog.txt b/src/res/HelpLog.txt index 6ecb0414..ddbdbfec 100644 --- a/src/res/HelpLog.txt +++ b/src/res/HelpLog.txt @@ -112,10 +112,14 @@ Long Parameters: --PDF-no-BitmapMissingFonts Do not bitmap missing fonts, fonts will be substituted. --use-ISO190051 - Create PDF to the ISO 19005-1 standard. + Create PDF to the ISO 19005-1 standard. + --enable-wordvbaauto By Default any autorun vba will not run, use this parameter if you wish vba to Autorun. Word Only. + --sheets + Select which sheets to save. Can be comma seperated list of 0 index numbers or sheet names + Experimental: From ad7310f3ea9554227a9f3ea4a03d9b97418ad6c4 Mon Sep 17 00:00:00 2001 From: Toby Allen Date: Sun, 22 Jun 2025 18:01:21 +0100 Subject: [PATCH 12/15] named --- src/MainUtils.pas | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/MainUtils.pas b/src/MainUtils.pas index b5cd9df2..d7b6cf2d 100644 --- a/src/MainUtils.pas +++ b/src/MainUtils.pas @@ -522,7 +522,7 @@ constructor TDocumentConverter.Create; FBitmapMissingFonts := true; FInputFiles := TStringList.Create; fDontUseAutoVBA := true; - fSheets := TStringList.Create; + fSelectedSheets := TStringList.Create; end; @@ -544,7 +544,7 @@ destructor TDocumentConverter.Destroy; FInputFiles.Free; - fSheets.Free; + fSelectedSheets.Free; if assigned(FNetHandle) then begin @@ -1867,7 +1867,7 @@ procedure TDocumentConverter.SetRemoveFileOnConvert(const Value: boolean); procedure TDocumentConverter.Setsheets(const Value: TStrings); begin - Fsheets := Value; + fSelectedSheets := Value; end; procedure TDocumentConverter.SetSkipDocsWithTOC(const Value: Boolean); From d83db6cc82141a5010707c4056315d7edcd03041 Mon Sep 17 00:00:00 2001 From: Toby Allen Date: Sun, 22 Jun 2025 19:29:47 +0100 Subject: [PATCH 13/15] working with selected tabs (selected manually) --- src/ExcelUtils.pas | 63 +++++++++++++++++++++-- src/MainUtils.pas | 7 +-- src/res/HelpLog.txt | 5 +- test/inputfilesxl/wk1test-MultiSheet.xls | Bin 55296 -> 55296 bytes 4 files changed, 67 insertions(+), 8 deletions(-) diff --git a/src/ExcelUtils.pas b/src/ExcelUtils.pas index 5a978156..4d45c295 100644 --- a/src/ExcelUtils.pas +++ b/src/ExcelUtils.pas @@ -14,7 +14,9 @@ ****************************************************************) interface -uses Classes,Sysutils, MainUtils, ResourceUtils, ActiveX, ComObj, WinINet, Variants, Excel_TLB_Constants,StrUtils; +uses Classes,Sysutils, MainUtils, ResourceUtils, ActiveX, ComObj, WinINet, Variants, + + Excel_TLB_Constants,StrUtils; type @@ -25,6 +27,7 @@ interface function SingleFileExecuteConversion(fileToConvert, OutputFilename: String; OutputFileFormat: Integer): TConversionInfo; procedure SaveAsPDF(OutputFilename : string) ; procedure SaveAsXPS(OutputFilename: string); + procedure SaveAsCSV(OutputFilename: string); public constructor Create() ; @@ -254,9 +257,12 @@ function TExcelXLSConverter.OfficeAppVersion(): String; procedure TExcelXLSConverter.SaveAsPDF(OutputFilename : string) ; var - FromPage, ToPage : OleVariant; + FromPage, ToPage, SheetList, ExcelSheets : OleVariant; + Sheet1,Sheet2,Sheet3 , Workbook , SheetsArray: OleVariant; + activeSheet : OleVariant; begin + ExcelApp.Application.DisplayAlerts := False ; if pdfPrintToPage > 0 then begin @@ -271,9 +277,53 @@ procedure TExcelXLSConverter.SaveAsPDF(OutputFilename : string) ; FromPage := EmptyParam; ToPage := EmptyParam; end ; +(* + Sheets(Array("Wednesday Lunch", "Sheet2", "Sheet3")).Select + Sheets("Wednesday Lunch").Activate + ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ + "C:\Development\github\docto\test\GeneratedTestputFiles\wk1test-MultiShasdfasdfeetmulti635345.pdf" _ + , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ + :=False, OpenAfterPublish:=False + ActiveCell.FormulaR1C1 = "" + Range("AM13").Select +End Sub*) + + if SelectedSheets.Count = 0 then + begin + logDebug('Selecting sheets',VERBOSE); + SheetList := VarArrayCreate([0, 2], varVariant); // 3 sheets + SheetList[0] := 'Wednesday Lunch'; + SheetList[1] := 'Sheet2'; + SheetList[2] := 'Sheet3'; + + Workbook := ExcelApp.activeWorkbook; + // Get references to the individual sheets + // Sheet1 := Workbook.Worksheets[3]; + // Sheet2 := Workbook.Worksheets[2] ; + // Sheet3 := Workbook.Worksheets[1]; + + // Create a variant array of the sheet COM objects + SheetsArray := VarArrayCreate([0, 1], varVariant); + SheetsArray[0] := 2; + SheetsArray[1] := 3; +// SheetsArray[2] := 3; + + // Select the sheets +// ExcelApp.activeWorkbook.worksheets(SheetsArray).Select; + +// ExcelApp.activeWorkbook.worksheets.Select(3); +//ExcelApp.activeWorkbook.Sheets.Item[2].Select; + + activeSheet := ExcelApp.ActiveWorkbook.Sheets[2]; + logDebug('SeT sheets',VERBOSE); + // ExcelApp.ActiveWorkBook.save; + end ; + + + ExcelApp.Application.DisplayAlerts := False ; - ExcelApp.activeWorkbook.ExportAsFixedFormat(XlFixedFormatType_xlTypePDF, + activeSheet.ExportAsFixedFormat(XlFixedFormatType_xlTypePDF, OutputFilename, EmptyParam, // Quality IncludeDocProps, // IncludeDocProperties, @@ -284,7 +334,13 @@ procedure TExcelXLSConverter.SaveAsPDF(OutputFilename : string) ; EmptyParam // FixedFormatExtClassPtr ) ; + + + + + ExcelApp.ActiveWorkBook.Saved := True + end; @@ -309,6 +365,7 @@ procedure TExcelXLSConverter.SaveAsCSV(OutputFilename: string); //CSV pops up alert. must be hidden for automation ExcelApp.Application.DisplayAlerts := False ; + // if fSelectedSheets.Count > 0 then dynamicoutputDir := ExtractFilePath(OutputFilename); // includes last \ diff --git a/src/MainUtils.pas b/src/MainUtils.pas index d7b6cf2d..627bdbdf 100644 --- a/src/MainUtils.pas +++ b/src/MainUtils.pas @@ -19,7 +19,7 @@ interface Const VERBOSE = 10; - DEBUG = 9; + DEBUG = 9; HELP = 8; CHATTY = 5; STANDARD = 2; @@ -71,7 +71,7 @@ TDocumentConverter = class FKeepIRM: boolean; FDocStructureTags: boolean; FBitmapMissingFonts: boolean; - Fsheets: TStrings; + fSelectedSheets: TStrings; procedure SetCompatibilityMode(const Value: Integer); @@ -186,7 +186,8 @@ TDocumentConverter = class property pdfPrintToPage : integer read FpdfPrintToPage; property useISO190051 : boolean read FuseISO190051; property pdfOptimizeFor : integer read fpdfOptimizeFor write fpdfOptimizeFor; - property sheets : TStrings read Fsheets write Setsheets; + property SelectedSheets : TStrings read fSelectedSheets write Setsheets; + property ExportMarkup : integer read fExportMarkup; property IncludeDocProps : boolean read FIncludeDocProps write SetIncludeDocProps; diff --git a/src/res/HelpLog.txt b/src/res/HelpLog.txt index ddbdbfec..29070d70 100644 --- a/src/res/HelpLog.txt +++ b/src/res/HelpLog.txt @@ -118,8 +118,9 @@ Long Parameters: By Default any autorun vba will not run, use this parameter if you wish vba to Autorun. Word Only. --sheets - Select which sheets to save. Can be comma seperated list of 0 index numbers or sheet names - + Select which sheets to save. Can be comma seperated list of 0 index numbers or sheet names. Excel Only. + --allsheets + If converting to CSV default behaviour is to convert first sheet. This will convert all with appropriate names Experimental: diff --git a/test/inputfilesxl/wk1test-MultiSheet.xls b/test/inputfilesxl/wk1test-MultiSheet.xls index bcd9766112d23e20243b0dfc6ae2e1bf801c513b..e8adeea7f0f8ba11356d4b215b0093c21d3e5709 100644 GIT binary patch delta 72 zcmV-O0Jr~uumgaw1F+@-1poj500Oh?0=ZoQ4zs0Ta~qS8mnySDd`=qy0+W%KDU;S< e6tm8k3mpWH0=ZoQ2(zVNa~lB$laZGxvqF4M8oXmmTt3g){g Date: Sun, 22 Jun 2025 20:32:30 +0100 Subject: [PATCH 14/15] using active sheet pdf manually selected sheets. not selected sheets --- src/ExcelUtils.pas | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ExcelUtils.pas b/src/ExcelUtils.pas index 4d45c295..fefe19f3 100644 --- a/src/ExcelUtils.pas +++ b/src/ExcelUtils.pas @@ -312,11 +312,12 @@ procedure TExcelXLSConverter.SaveAsPDF(OutputFilename : string) ; // ExcelApp.activeWorkbook.worksheets(SheetsArray).Select; // ExcelApp.activeWorkbook.worksheets.Select(3); -//ExcelApp.activeWorkbook.Sheets.Item[2].Select; +//ExcelApp.activeWorkbook.Sheets.Item[2] .Select; + + activeSheet := ExcelApp.ActiveWorkbook.Sheets.Item[3]; - activeSheet := ExcelApp.ActiveWorkbook.Sheets[2]; logDebug('SeT sheets',VERBOSE); - // ExcelApp.ActiveWorkBook.save; + ExcelApp.ActiveWorkBook.save; end ; From d1de629825c3d3e91dd64ebd321fd9f496b11c67 Mon Sep 17 00:00:00 2001 From: Toby Allen Date: Sun, 22 Jun 2025 20:32:41 +0100 Subject: [PATCH 15/15] update --- test/inputfilesxl/wk1test-MultiSheet.xls | Bin 55296 -> 55296 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/test/inputfilesxl/wk1test-MultiSheet.xls b/test/inputfilesxl/wk1test-MultiSheet.xls index e8adeea7f0f8ba11356d4b215b0093c21d3e5709..129dd4c7e49db5038888a54dd7f81a408c36e1b5 100644 GIT binary patch delta 43 ycmZqJz}&EbdBfubM%B$v5+0iYsT0!$WLX>bODe3{e0NK~;^bOuj?E?4dKdwrx)SdI delta 48 zcmZqJz}&EbdBfubM#arf5+0iYsT0!$WLX*dpKPAD`R