VBS: 通过代码自动批量将Excel表提取为HTML

2022-4-14 8:42:34 [大杂烩 - PC与手机]

一个文档系统中,要将上传的WORD及EXECEL文件提取为HTML,以便通过网页预览及检索。


MS OFFICE 提供了VBA的接口,在WINDOWS平台下也提供了DCOM组件,可以通过程序来调用控制。当然,运行程序的机器上得安装有MS OFFICE。


对于Excel ,可使用以下代码(以VBS为例,其他JS或C++、Python等类似):

'创建对象并初始设置

Set objExcel = Createobject("Excel.Application")  
objExcel.Visible =true ' False
objExcel.DisplayAlerts = False



'打开xls文件

Set objWorkbook=objExcel.Workbooks.Open(xlsfile,0,true)

'OPEN方法调用参数为 Open (FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad)

' 其中 UpdateLinks=0 工作簿打开时不更新外部引用(链接)。

'    UpdateLinks=3 则更新,如果不设置会出现提示窗口,程序中断

 Format参数:1 tab键 2 逗号 3 空格 4 分号 5 Nothing 6 自定义字符(Delimiter 参数)


'将xls保存为html文件,FileFormat参数附后


objWorkbook.Worksheets(1).SaveAs htmlfile,44

'SaveAs方法的参数:SaveAs (FileName、 FileFormat、 Password、 WriteResPassword、 ReadOnlyRecommended、 CreateBackup、 AddToMru、 TextCodepage、 TextVisualLayout、 Local)


'找到工作表的HTML文件,一个工作表一个HTML文件

'HTML文件不包含frameset,这个HTML文件就是一张工作表。如果包含,则表明工作表的HTML文件在同名加files的文件夹下,形如“---.files\001.htm”

'当objWorkbook.Worksheets.count=1时,就是一张工作表,但>1也可能只有一张,其他sheet是空的,不会保存为htm


if objWorkbook.Worksheets.count=1 or instr(fso.opentextfile(htmlfile,1).readall,"<frameset")=0 then
HTML= getHTML(htmlfile) 
else
for i=1 to objWorkbook.Worksheets.count
HTML=HTML & "<div class='sheetname'>" & objWorkbook.Worksheets(i).name & "</div>" & getHTMLl(left(htmlfile,len(htmlfile)-4) & ".files\sheet" & right("000" & i ,3) & ".htm") 

  next

enf if

'从HTML文件 读取工作表内容


getHTML(htmlfile)  就是取出htmlfile中<body></body>之间的内容。


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



Excel对象的常见方法:

(一)创建Excel对象: 
oExcel=CreateObject("Excel.Application")
1)显示当前窗口: oExcel.Visible=True
2)更改Excel标题栏: oExcel.Caption="调用MicrosoftExcel"
3)添加新工作簿: oExcel.WorkBooks.Add
4)打开已存在的工作簿: oExcel.WorkBooks.Open("C:\Demo.xls")
5)设置第2个工作表为活动工作表:oExcel.WorkSheets(2).Activate或 oExcel.WorksSheets("Sheet2").Activate
6)给单元格赋值: oExcel.Cells(1,4).Value="第一行第四列" 
7)设置指定列的宽度(单位:字符个数),以第一列为例:oExcel.ActiveSheet.Columns(1).ColumnsWidth=5 
8)设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:oExcel.ActiveSheet.Rows(2).RowHeight=1/0.035'1厘米
9)在第8行之前插入分页符: oExcel.WorkSheets(1).Rows(8).PageBreak=1
10)在第8列之前删除分页符: oExcel.ActiveSheet.Columns(4).PageBreak=0
11)指定边框线宽度: oExcel.ActiveSheet.Range("B3:D4").Borders(2).Weight=3
1-左2-右3-顶4-底5-斜(\)6-斜(/)
12)清除第一行第四列单元格公式:
oExcel.ActiveSheet.Cells(1,4).ClearContents
13)设置第一行字体属性:
oExcel.ActiveSheet.Rows(1).Font.Name="隶书"
oExcel.ActiveSheet.Rows(1).Font.Color=clBlue
oExcel.ActiveSheet.Rows(1).Font.Bold=True
oExcel.ActiveSheet.Rows(1).Font.UnderLine=True
14)进行页面设置:
a.页眉:
oExcel.ActiveSheet.PageSetup.CenterHeader="报表演示"
b.页脚:
oExcel.ActiveSheet.PageSetup.CenterFooter="第&P页"
c.页眉到顶端边距2cm:
oExcel.ActiveSheet.PageSetup.HeaderMargin=2/0.035
d.页脚到底端边距3cm:
oExcel.ActiveSheet.PageSetup.HeaderMargin=3/0.035
e.顶边距2cm:
oExcel.ActiveSheet.PageSetup.TopMargin=2/0.035
f.底边距2cm:
oExcel.ActiveSheet.PageSetup.BottomMargin=2/0.035
g.左边距2cm:
oExcel.ActiveSheet.PageSetup.LeftMargin=2/0.035
h.右边距2cm:
oExcel.ActiveSheet.PageSetup.RightMargin=2/0.035
i.页面水平居中:
oExcel.ActiveSheet.PageSetup.CenterHorizontally=2/0.035j.页面垂直居中:
oExcel.ActiveSheet.PageSetup.CenterVertically=2/0.035
k.打印单元格网线:
oExcel.ActiveSheet.PageSetup.PrintGridLines=True
15)拷贝操作:a.拷贝整个工作表:
oExcel.ActiveSheet.Used.Range.Copyb.拷贝指定区域:
oExcel.ActiveSheet.Range("A1:E2").Copy
c.从A1位置开始粘贴:
oExcel.ActiveSheet.Range.("A1").PasteSpecial
d.从文件尾部开始粘贴:
oExcel.ActiveSheet.Range.PasteSpecial
16)插入一行或一列:
a.oExcel.ActiveSheet.Rows(2).Insert
b.oExcel.ActiveSheet.Columns(1).Insert

17)删除一行或一列:
a.oExcel.ActiveSheet.Rows(2).Delete
b.oExcel.ActiveSheet.Columns(1).Delete
18)打印预览工作表:
oExcel.ActiveSheet.PrintPreview
19)打印输出工作表:
oExcel.ActiveSheet.PrintOut
20)工作表保存:
ifnotoExcel.ActiveWorkBook.SavedthenoExcel.ActiveSheet.PrintPreview
21)工作表另存为:
oExcel.SaveAs("C:\Excel\Demo1.xls")
22)放弃存盘:
oExcel.ActiveWorkBook.Saved=True
23)关闭工作簿:
oExcel.WorkBooks.Close
24)退出Excel:

oExcel.Quit


SaveAs方法的fileFormat 类型     十进制值 
xlAddIn 18
xlCSV 6
xlCSVMac 22
xlCSVMSDOS 24
xlCSVWindows 23
xlCurrentPlatformText -4158
xlDBF2 7
xlDBF3 8
xlDBF4 11
xlDIF 9
xlExcel2 16
xlExcel2FarEast 27
xlExcel3 29
xlExcel4 33
xlExcel4Workbook 35
xlExcel5 39
xlExcel7 39
xlExcel9795 43
xlHtml 44
xlIntlAddIn 26
xlIntlMacro 25
xlSYLK 2
xlTemplate 17
xlTextMac 19
xlTextMSDOS 21
xlTextPrinter 36
xlTextWindows 20
xlUnicodeText 42
xlWebArchive 45
xlWJ2WD1 14
xlWJ3 40
xlWJ3FJ3 41
xlWK1 5
xlWK1ALL 31
xlWK1FMT 30
xlWK3 15
xlWK3FM3 32
xlWK4 38
xlWKS 4
xlWorkbookNormal -4143
xlWorks2FarEast 28
xlWQ1 34
xlXMLData 47
xlXMLSpreadsheet 46


微软自己的参考文档

https://docs.microsoft.com/zh-cn/office/vba/api/excel.workbooks.open