一个文档系统中,要将上传的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 参数)
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
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