将(部分)Excel表格范围导出为CSV

7
我正在尝试找出如何将工作表的部分导出到CSV文件,而不必循环遍历每一行或单元格并逐个打印到文件中。我需要保留本地格式作为一个要求。
Sheets("PI_OUTPUT").Copy

这将复制整个工作表。我在1到20000行和A到X列中有公式,但在数据处理后可能会有不同数量的空行。如果我使用复制方法,我会复制所有的空白行,这会输出为逗号等格式。

我尝试使用activesheet.deleterows来删除复制后的输出文件中的空行,但是这会导致错误。

我已经尝试过:

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

更糟糕的是,我需要在多个工作表之间进行操作,每个工作表的列数和行数都不同,并且保存为单独的文件。因此,我正在寻找一种可以重复多次的方法。我已经设置了弹出文件夹路径选择窗口,并动态构建了文件名,但复制/粘贴却无法正常运行。

1个回答

10

你可以使用以下代码:

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 

1
我已经让它正常工作了:With wsh.Range("A1:X20000") .AutoFilter 1, "<>" '筛选以获取非空单元格 wsh.Range(wsh.Cells(1, 1), wsh.Cells(1, 24).End(xlDown)).Copy我省略了第二个自动筛选并调整了单元格引用。 感谢您的帮助! - Itsallgonepearshaped
1
@Itsallgonepearshaped 我只是在调试它。是的,那就是问题所在。很高兴能帮上忙。 - M--

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