将 Excel Sheet 的(部分)范围导出到 CSV
Export Range of (Part of) an Excel Sheet to CSV
我正在尝试弄清楚如何仅将 sheet 的一部分导出到 csv,而无需循环遍历每一行或单元格并将它们单独打印到文件中。作为一项要求,我需要维护本地格式。
Sheets("PI_OUTPUT").Copy
这会复制整个 sheet。我在第 1 行到 20000 行和 A 到 X 列中有公式,但在处理数据后有可变数量的空白行。如果我使用复制方法,我复制所有空行,输出为逗号行等。
我尝试使用 activesheet.deleterows 来 trim 复制后的输出文件,但这给了我一个错误。
我试过使用:
Worksheets("PI_OUTPUT").Activate
Sheets("PI_OUTPUT").Range("A2:X5000").Copy
我尝试使用另一个建议:specialcells(xlCellTypeVisible)
,但我似乎无法让它工作:
Set rng = Sheets("PI_OUTPUT").SpecialCells(xlCellTypeVisible)
Set Workbook = Workbooks.Add
With Workbook
Call rng.Copy
.Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues
.SaveAs filename:=MyPath & MyFileName, FileFormat:=xlCSV
.Close
End With
更糟糕的是,我必须在多个 sheet 中执行此操作,所有这些都具有可变数量的列和行,所有这些都保存到单独的文件中。所以我正在寻找可以重复多次的东西。我有一个文件夹路径弹出到 select 位置,并且有一个动态构造的文件名,但是 copy/paste 逃避了文件我。
您可以使用下面的代码;
Sub testexport()
'Adpated from OzGrid;
' export Macro as CSV
Dim wsh As Worksheet
Set wsh = ThisWorkbook.Worksheets("PI_OUTPUT")
With wsh.Range("A2:X20000")
.AutoFilter 1, "<>" 'Filter to get only non-blank cells
'assuming there is no blank cell within a filled row:
wsh.Range(wsh.Cells(2, 1), wsh.Cells(24, 2).End(xlDown)).Copy 'copy non-blank cells
'.AutoFilter should not cancel autofilter as it clears cutcopy mode
End With
Application.DisplayAlerts = False 'avoid "save prompt window"
Workbooks.Add
ActiveSheet.Paste
'Saves to C drive as Book2.csv
ActiveSheet.SaveAs Filename:= _
"C:\Book2.csv" _
, FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close
wsh.Range("A2:X20000").AutoFilter 'clear the filter
Application.DisplayAlerts = True 'set to default
End Sub
我正在尝试弄清楚如何仅将 sheet 的一部分导出到 csv,而无需循环遍历每一行或单元格并将它们单独打印到文件中。作为一项要求,我需要维护本地格式。
Sheets("PI_OUTPUT").Copy
这会复制整个 sheet。我在第 1 行到 20000 行和 A 到 X 列中有公式,但在处理数据后有可变数量的空白行。如果我使用复制方法,我复制所有空行,输出为逗号行等。
我尝试使用 activesheet.deleterows 来 trim 复制后的输出文件,但这给了我一个错误。
我试过使用:
Worksheets("PI_OUTPUT").Activate
Sheets("PI_OUTPUT").Range("A2:X5000").Copy
我尝试使用另一个建议:specialcells(xlCellTypeVisible)
,但我似乎无法让它工作:
Set rng = Sheets("PI_OUTPUT").SpecialCells(xlCellTypeVisible)
Set Workbook = Workbooks.Add
With Workbook
Call rng.Copy
.Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues
.SaveAs filename:=MyPath & MyFileName, FileFormat:=xlCSV
.Close
End With
更糟糕的是,我必须在多个 sheet 中执行此操作,所有这些都具有可变数量的列和行,所有这些都保存到单独的文件中。所以我正在寻找可以重复多次的东西。我有一个文件夹路径弹出到 select 位置,并且有一个动态构造的文件名,但是 copy/paste 逃避了文件我。
您可以使用下面的代码;
Sub testexport()
'Adpated from OzGrid;
' export Macro as CSV
Dim wsh As Worksheet
Set wsh = ThisWorkbook.Worksheets("PI_OUTPUT")
With wsh.Range("A2:X20000")
.AutoFilter 1, "<>" 'Filter to get only non-blank cells
'assuming there is no blank cell within a filled row:
wsh.Range(wsh.Cells(2, 1), wsh.Cells(24, 2).End(xlDown)).Copy 'copy non-blank cells
'.AutoFilter should not cancel autofilter as it clears cutcopy mode
End With
Application.DisplayAlerts = False 'avoid "save prompt window"
Workbooks.Add
ActiveSheet.Paste
'Saves to C drive as Book2.csv
ActiveSheet.SaveAs Filename:= _
"C:\Book2.csv" _
, FileFormat:=xlCSV, CreateBackup:=False
ActiveWorkbook.Close
wsh.Range("A2:X20000").AutoFilter 'clear the filter
Application.DisplayAlerts = True 'set to default
End Sub