1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 自制 Word Excel 批转 PDF 工具

自制 Word Excel 批转 PDF 工具

时间:2023-08-02 03:07:45

相关推荐

自制 Word Excel 批转 PDF 工具

自制 Word、Excel 批转 PDF 工具 原文:自制 Word、Excel 批转 PDF 工具

目前做金融业的项目,该公司每天会产生很多 Word、Excel 文档,需要大量地转换为 PDF,除了自己保存外,也要给金融主管机构作为备份。由于文档数量很多,希望有工具能在下班前、作完设置后,放着让机器自动、大量地批转;除此之外,亦希望有特殊的功能,例如给主管机构的 Excel 文档,能仅选择其中某几个 sheet (工作表) 转成 PDF。 我找了网络上许多 PDF 转换工具,没有完全符合上述需求的,只好自己用 .NET / VSTO 写一个。

开发环境:

(1) VS / Windows Form / / VSTO

(2) Office 或 Office 或更高版本 (需要引用新版 Office 里的 COM 组件)

(3) Microsoft Office 加载项:Microsoft Save as PDF 或 XPS(可将 Office 或更高版本的文件,导出成 PDF 或 XPS 文件)

执行环境:

(1) .NET Framework

(2) Office 或 Office 或更高版本 (旧版的 Office XP / Office 不行)

(3) Microsoft Office 加载项:Microsoft Save as PDF 或 XPS(可将 Office 或更高版本的文件,导出成 PDF 或 XPS 文件)

特性:

(1) 支持中文文件名 (免费的 PDFCreator 从 1.2.x 版后即不支持)、中文目录、中文命名的 sheet。

(2) 可选择 Excel 的某一个或某几个 sheet,整合转换成「单一个」PDF (Adobe Acrobat Standard 亦无此功能,要很贵的 Adobe Acrobat Professional 才有)。

(3) 可选择 Excel 的某一个或某几个 sheet,「各自」转换成一个 PDF (我在网络上未找到具备此功能的软件)。

(4) 批转的速度很快,大量批转时亦不曾发生程序崩溃,或占据 Word、Excel 文件资源不释放的情形。

(5) 可处理 Excel 里,整个 sheet 内容全为空白的不正常情形。

-------------------------------------------------

本帖的示例下载点:

/WizardWu/120930.zip

附源码。若需要简体中文介面的网友,请自行用 VS 开启项目后,改写及编译。

---------------------------------------------------

图 1直接双击 .exe 执行

图 2分为两大功能

图 3功能一,批转多个目录里的 Word、Excel 文档 - 转换前

图 4功能一,批转多个目录里的 Word、Excel 文档 - 转换后

关键代码 (大批文件转换) '''<summary>

'''Word轉PDF

'''</summary>

'''<paramname="PathAndFileName">路徑名\檔名.副檔名</param>

PublicSubConvertWordToPDF(ByValPathAndFileNameAsString)

DimmstrResultFormPathAsString=PathAndFileName

DimstrPDFFileNameAsString=Path.ChangeExtension(mstrResultFormPath,".pdf")

DimdocAppAsObject=CreateObject("Word.Application")

DimdocDocAsObject=docApp.Documents.Open(mstrResultFormPath)

Try

'ExportFormat:指定要以PDF還是XPS格式儲存文件

docDoc.ExportAsFixedFormat(OutputFileName:=strPDFFileName,ExportFormat:=17)

CatchexAsException

ThrowNewException("轉換Word檔"&PathAndFileName&"時發生錯誤,錯誤為:"&ex.Message)

Finally

docApp.Documents.Close()

docApp.Quit()

EndTry

EndSub

'''<summary>

'''Excel轉PDF(可有空白sheet)

'''</summary>

'''<paramname="PathAndFileName">路徑名\檔名.副檔名</param>

PublicSubConvertExcelToPDF(ByValPathAndFileNameAsString)

'DimwsAsExcel.Worksheet

DimmstrResultFormPathAsString=PathAndFileName'例:d:\excelTestPDF.xls

DimstrPDFFileNameAsString=Path.ChangeExtension(mstrResultFormPath,".pdf")

DimxlsAppAsObject=CreateObject("Excel.Application")

DimxlsWBookAsObject=xlsApp.Workbooks.Open(mstrResultFormPath)

Try

xlsWBook.ExportAsFixedFormat(Type:=0,Filename:=strPDFFileName,IgnorePrintAreas:=False,OpenAfterPublish:=False,IncludeDocProperties:=True,Quality:=Excel.XlFixedFormatQuality.xlQualityStandard)

CatchexAsException

ThrowNewException("轉換Excel檔"&PathAndFileName&"時發生錯誤,錯誤為:"&ex.Message)

Finally

xlsApp.Workbooks.Close()

xlsApp.Quit()

EndTry

EndSub

图 5功能二,可选择 Excel 的某一个或某几个 sheet,整合转换成「单一个」PDF 关键代码 (Excel 的某一个或某几个 sheet,整合转换成「单一个」PDF) '勾選的sheet轉成單一個PDF檔(若選到空白的sheet,不會出錯,但不會印出來)

PublicSubConvertCheckedSheetToOnePDF(ByValPathAndFileNameAsString,ByVallistCheckedAsList(OfString),ByVallistUnCheckedAsList(OfString))

DimoExcelAsNewExcel.Application

DimoBooksAsExcel.Workbooks,oBookAsExcel.Workbook

DimoSheetsAsExcel.Sheets

'DimoSheetAsExcel.Worksheet

DimsTemplateAsString,sFileNameAsString

'Excel檔路徑

sTemplate=PathAndFileName

'捉路徑+檔名(不含副檔名)

sFileName=PathAndFileName.Substring(0,PathAndFileName.LastIndexOf("."))

oExcel.Visible=False

oExcel.DisplayAlerts=False

oBooks=oExcel.Workbooks

oBooks.Open(sTemplate)

oBook=oBooks.Item(1)

oSheets=oBook.Worksheets

'將沒勾選的Worksheet,從Workbook裡移除

IfNotlistUnCheckedIsNothingThen

IflistUnChecked.Count>0Then

DimsheetDeleteAsExcel.Worksheet=Nothing'暫存用

ForEachs_unCInlistUnChecked

'oBook.Sheets(s_unC).Delete()'這種寫法,會引發:無效的索引 (發生例外狀況於HRESULT:0x8002000B(DISP_E_BADINDEX」

sheetDelete=oBook.Sheets(s_unC)'依sheet的中文名稱,作為移除的依據

IfNotsheetDeleteIsNothingThen

sheetDelete.Delete()

EndIf

sheetDelete=Nothing

Next

EndIf

EndIf

oBook.ExportAsFixedFormat(Type:=Excel.XlFixedFormatType.xlTypePDF,Filename:=sFileName&".pdf",Quality:=Excel.XlFixedFormatQuality.xlQualityStandard,IncludeDocProperties:=True,IgnorePrintAreas:=False,OpenAfterPublish:=False)

图 6功能二,可选择 Excel 的某一个或某几个 sheet,「各自」转换成一个 PDF

关键代码 (Excel 的某一个或某几个 sheet,「各自」转换成一个 PDF) '勾選的sheet各轉成一個PDF檔(若選到空白的sheet,該sheet的轉換會失敗)

PublicSubConvertCheckedSheetToMultiplePDF(ByValPathAndFileNameAsString,ByVallistCheckedAsList(OfString))

DimoExcelAsNewExcel.Application

DimoBooksAsExcel.Workbooks,oBookAsExcel.Workbook

DimoSheetsAsExcel.Sheets

DimoSheetAsExcel.Worksheet

DimsTemplateAsString,sFileNameAsString

'Excel檔路徑

sTemplate=PathAndFileName

'捉路徑+檔名(不含副檔名)

sFileName=PathAndFileName.Substring(0,PathAndFileName.LastIndexOf("."))

oExcel.Visible=False

oExcel.DisplayAlerts=False

oBooks=oExcel.Workbooks

oBooks.Open(sTemplate)

oBook=oBooks.Item(1)

oSheets=oBook.Worksheets

ForiAsInteger=0TolistChecked.Count-1

ProgressBar1.PerformStep()'進度列

'ss&=listChecked(i)&vbCrLf

oSheet=CType(oSheets.Item(listChecked(i)),Excel.Worksheet)

'ss&=oSheet.Name&vbCrLf

oSheet.ExportAsFixedFormat(Excel.XlFixedFormatType.xlTypePDF,IncludeDocProperties:=True,OpenAfterPublish:=False,Quality:=Excel.XlFixedFormatQuality.xlQualityStandard,_

Filename:=sFileName&"_"&oSheet.Name&".pdf")

Next

图 7Office 开发环境。项目需要手动引用三个组件

如上图 7,VS 里需要自行引用 Microsoft Office.Tools.Excel、Microsoft Office.Tools.Word 两个 .NET 组件,以及 Microsoft Excel Object Library 这个Office 里的COM 组件。 但需注意,在开发环境中若安装的是 Office ,则可引用的 Microsoft Excel Object Library 版本为 1.5版 (11.0)或 1.6版(12.0),此时编译的程序,可拿至安装 Office 及 Office 的用户机器上执行;但若如下图 8,在开发环境中安装的是 Office ,则可引用的 Microsoft Excel Object Library 版本为 1.7 版 (14.0),此时编译的程序,就只能拿至安装 Office 的用户机器上执行,若拿至安装Office 的用户机器上会无法执行。

图 8Office 开发环境。项目需要手动引用三个组件

此种转换功能,亦可写成 网页介面,但不建议。因转化动作极耗系统资源,若大量批转容易造成IIS 死机,且IIS_WPG、Network Service 群组默认的权限不足,需要另外处理权限、安全性的设置。


参考文章:

Word 及 Excel 的 Workbook.ExportAsFixedFormat Method

/zh-cn/library/microsoft.office.tools.excel.workbook.exportasfixedformat.aspx

/zh-cn/library/microsoft.office.tools.word.document.exportasfixedformat.aspx

/en-us/library/office/bb238907%28v=office.12%29.aspx

如何给excel新增工作表 C# (Worksheet 操作大全)

/u/0623/14/d47504a2-086b-4449-bffb-4f9ae6b62eb4.html

產生 PDF 或 XPS 檔 (繁体中文)

/viewtopic.mspx?t=3911

產生 PDF 或 XPS 檔 (繁体中文)

.tw/rainmaker/archive//01/25/13275.aspx

Merge Workbook With Another Workbook using VSTO

http://social./forums/en-US/vsto/thread/85a3dac8-b32a-443a-8601-4e95935fe368

Printing multiple worksheets as seperate PDF files

/forum/excel-questions/646486-printing-multiple-worksheets-seperate-pdf-files.html

/q/Excel-1059//4/converting-worksheets-workbook-separate.htm

调用COM Word转Pdf之我见

/art/1055828

Print To PDF Using Microsoft's PDF/XPS Add-in

http://www.excelguru.ca/content.php?170-Print-To-PDF-Using-Microsoft-s-PDF-XPS-Add-in

http://www.excelguru.ca/content.php?161

How do I export multiple sheets/charts to a single PDF, but not the entire workbook ? (此做法有缺陷)

http://social./Forums/pl-PL/exceldev/thread/7b16b912-5356-4c3c-b517-6f1c91d26d72

VSTO 入门 (Visual Studio Tools for Office)

/zh-cn/library/23cw517s%28v=vs.80%29.aspx


参考书籍:

Visual Studio Tools for Office

/html/download/books//1008/2473.html


相关文章:

利用Office Save as PDF or XPS 实现Office批传PDF

/mecity/archive//06/23/2087973.html

Convert Word-Documents to PDF on an Server

/Articles/38592/Convert-Word-Documents-to-PDF-on-an-ASP-NET-Server

Excel VBA - WorkSheet新增、複製、刪除(不出現提示視窗)

http://tgw1029.blogspot.tw//01/excel-vba-worksheet.html

/en-us/library/microsoft.office.tools.excel.worksheet.copy%28VS.80%29.aspx


posted on -11-02 14:56 NET未来之路 阅读(...) 评论(...) 编辑 收藏

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。