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

时间:2013-03-04 13:38:38

标签: excel vbscript autoit

如何只将CSV的可见单元格保存为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 个答案:

答案 0 :(得分:4)

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

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?