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

简洁版本:

你怎样才能把一个xls的可见单元格保存为一个csv?

更长的版本:

我有一个很大的.xls文件,其中包含一些分散在许多表单上的数据,我希望这些表单可以用于一些旧的UNIX Perl脚本。 我有一些代码,将观察该文件的修改,重新生成CSV文件,并将其FTP到我需要他们的地方。 问题是维护电子表格的人不想删除旧数据,他们只是将其隐藏起来以供后者参考。 我保存到csv的方法(正如您在大多数情况下所期望的那样)最终会隐藏所有的数据,并且可以并排显示,无法知道最初隐藏的内容。 我已经做了一些search在networking上,在这里,找不到任何方式(我能够遵循)做这个程序化。 以下是我正在使用的一些代码。 如果它可以作为答案的起点,这将使我更容易理解。

在此先感谢,你们总是非常有帮助。


下面是一些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() 

也许这太简单了,但是你想完成这个工作就完成了:

 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 

上面的代码是使用macroslogging器生成的。 线索是我们只select工作表中的可见单元格 ,将其复制/粘贴到新工作簿中,然后将其另存为CSV。 原始数据仍然完好无损。 代码的其余部分是微不足道的,也可能使用macroslogging器生成。

更多的想法看到这样的线程: 我如何只导出可见的单元格从Excel到CSV?