仅将可见单元格从 Excel 保存到 CSV

Posted

技术标签:

【中文标题】仅将可见单元格从 Excel 保存到 CSV【英文标题】:Saving only visible cells from Excel to CSV 【发布时间】:2013-02-18 14:50:04 【问题描述】:

如何仅将 xls 的可见单元格保存为 CSV?我有一个大的 .xls 文件,我想将它提供给一些旧的 UNIX Perl 脚本。我有一些代码可以监视文件的修改,重新生成 CSV 文件并将它们 FTP 到我需要的地方。

维护电子表格的人不想删除旧数据(他们只是将其隐藏起来)。我保存到 CSV 的方法包括并排的所有隐藏数据,无法知道最初隐藏了什么。以下是我正在使用的代码;用作答案的起点会让我更容易理解:

VBScript

Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook
Set oBook = oExcel.Workbooks.Open("S:\NetowrkFolder\SpreadSheet.xls")
Dim oSheet

If oBook.Sheets.count = 1 Then
  oBook.SaveAs "D:\output.csv", 6
else
  i=1
  aname=split("D:\output.csv",".",-1,1)
  For Each oSheet In oBook.WorkSheets
    fname = aname(0) & "_sheet" & Cstr(i)
    oSheet.SaveAs fname, 6
    i=i+1
  Next
End If

oBook.Close True
oExcel.Quit
WScript.Quit

我实际上是在 AutoIt 中做这个项目,下面是 AutoIt 代码:

Local $oExcel = ObjCreate("Excel.Application")
Local $oBook = $oExcel.Workbooks.Open("Y:\NetworkLocation\File.xls")
Local $oWorkSheets = $oBook.WorkSheets
Local $i = 1
For $oSheet In $oWorkSheets
    $oSheet.Auto
    $oSheet.SaveAs(@ScriptDir & '\csv\Sheet' & $i & '.dat', 6)
    $i += 1
Next
$oBook.Close(False)
$oExcel.Quit()

【问题讨论】:

【参考方案1】:

也许这太简单了,但它可以完成您想要完成的工作:

Sub Macro1()
    Selection.SpecialCells(xlCellTypeVisible).Select
    Selection.Copy
    Workbooks.Add
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWorkbook.SaveAs Filename:="D:\DOCUMENTS\visible.csv", FileFormat:= _
        xlCSV, CreateBackup:=False
End Sub

以上代码是使用宏记录器生成的。线索是我们只选择工作表上的可见单元格,将其复制/粘贴到新工作簿,然后将其保存为 CSV。原始数据仍然完好无损。其余代码很简单,也可以使用宏记录器生成。

有关更多想法,请参阅 SO 线程:How do I export only visible cells from Excel to CSV?

【讨论】:

这是一个 VBA 宏吗?由于这是在我的工作中完成的方式,如果我可以在不向电子表格本身添加任何宏的情况下完成它(除非这可以自动完成),那么对我来说会更方便。感谢您的回复! @Copas 你检查过我建议的链接吗?还有几个解决方案。但是...为什么您自己提供代码 iv 这不是您的选择?) @Copas 可以将该代码保存在另一个工作簿中,您可以从中运行宏、打开目标簿并执行上述操作。 我给的代码不是excel代码。我可以在单独的工作簿中找到它,但我正在寻找可以在无头服务器上按计划运行的东西。 标准 Windows 任务计划程序可以轻松地从工作簿中运行宏代码 - Google 中有大量的how-to 解决方案。

以上是关于仅将可见单元格从 Excel 保存到 CSV的主要内容,如果未能解决你的问题,请参考以下文章

Python - 如何根据单元格从 CSV 中删除重复的单元格/行

将特定单元格从 Excel 导出到 MS Access

在 Excel 中将某些特定单元格从一个工作表复制到另一个工作表的 VBA 可能是啥?

将编辑过的单元格从 JTable 保存到数据库

Excel 单元格从一张纸到另一张纸

将单元格从一个工作表保存到另一个工作簿中的工作表 - 无需提示即可保存