如何将Excel中的单个工作表导出为单个htm文件?

3
我在尝试将Excel工作簿中的一个工作表保存为单个的.htm文件时遇到了问题。
我知道如果我打开Excel、打开我的工作簿、选择我想要的工作表并执行“另存为” .htm 的格式,它就会生效。但是每次编码保存时,都会得到“Hitlist.htm”以及一个名为“Hitlist_files”的文件夹,其中包含所有样式表等。不幸的是,在powershell中它会把“另存为”的所有其他数据和补充文件(额外的文件夹、样式规范等)一起保存。
请求帮助,下面是代码。
#Create and get my Excel Obj
$excel = New-Object -comobject Excel.Application
$excel.visible=$false
$excel.DisplayAlerts=$false
$UserWorkBook = $excel.Workbooks.Open("e:\hitlist\hitlist.xlsx")

#Select first Sheet
$UserWorksheet = $UserWorkBook.Worksheets.Item(1)

#HitList File name and type
$hitlist = "E:\HitList\Hitlist.htm"
$xlHtml = 44

#Save, close, and clean up
#I tried this too...no go - $UserWorkBook.SaveAs($hitlist,$xlHtml)
$UserWorksheet.SaveAs($hitlist,$xlHtml)
$UserWorkBook.close()
$excel.quit()
$excel = $null

要明确一点 - 你最后一行的话,“..即使我将工作簿文件更改为仅有一个工作表!” 你是说你验证了 xlsx 工作簿只有一个工作表,但 HTML 输出文件显示了多个数据工作表? - gravity
尽管我删除了所有其他的工作表,但它仍然创建了“Hitlist_files”文件夹。 - Sencha718
那个文件夹,如果你查看它,是HTML的一个参考。它不应该有比你指定的表格(在位置一)更多的数据。你确定你看到的是其他工作表,而不是单个工作表的数据引用吗? - gravity
鉴于您提到的这些额外问题并不是原始问题的一部分...听起来您可能需要考虑彻底改进您的脚本。而不是在Excel中使用SaveAs,也许可以查看此处概述的ConvertTo-HTML。您可以将电子表格中的数据提取到PowerShell对象中,然后以这种方式导出到一个简单(单个)网页。 - gravity
这篇帖子中的问题准确地说明了我需要完成的任务。将Excel中的一个工作表转换为单个HTM文件。我花了很多时间在网站上进行彻底搜索,以找到适用的解决方案,并特别说明了我需要的所有内容,以免出现任何差错。可惜我的声望只有11分,否则这个问题本可以通过聊天来解决。 - Sencha718
显示剩余7条评论
1个回答

3
我已经根据您的要求再次调整了您的代码,我们进行了更多的澄清。特别是,请查看任何标有#changed-grav的行以获取我对您现有代码的修改,或者在最后(#added-grav)查看我添加的一些额外步骤以适应精确规格:
(这已经经过全面测试,并且似乎正按照您的要求工作 - 但是我进行了一些修改以进行测试,因此请告诉我是否没有将您需要的值改回去)
#Create and get my Excel Obj
$excel = New-Object -comobject Excel.Application
$excel.visible=$false
$excel.DisplayAlerts=$false
$UserWorkBook = $excel.Workbooks.Open("e:\hitlist\hitlist.xlsx")

#Select first Sheet
$UserWorksheet = $UserWorkBook.Worksheets.Item(1)

#HitList File name and type
$hitlistCSV = "e:\hitlist\hitlist.csv" #changed-grav
$hitlistHTML = "e:\hitlist\hitlist.htm" #changed-grav
$xlCSV = 6  #changed-grav

#Save, close, and clean up
$UserWorksheet.SaveAs($hitlistCSV,$xlCSV) #changed-grav
$UserWorkBook.close()
$excel.quit()
$excel = $null

#new functionality, to import the CSV and then export as HTM
#added-grav START
$htmlData = Get-Content $hitlistCSV | ConvertFrom-CSV | ConvertTo-HTML
Set-Content $hitlistHTML $htmlData
Remove-Item $hitlistCSV
#added-grav END

1
如果我有足够的声望来为你点赞,我一定会这么做。Grav,你太棒了!这太完美了,感谢你的帮助。希望我能回报你的恩情。 - Sencha718
很高兴我们终于为您解决了这个问题。 ;) - gravity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接