1

我对数据保存到 CSV 文件的方式有疑问。它仅在您尝试保存第一个单元格为空的单列时发生。您可以选择整列或一组相邻的单元格。将其保存到 CSV 文件后,将跳过前导的空单元格。我是作为 VBA 子程序的一部分来做的,但是手动操作会得到相同的结果。下面是我正在使用的代码和测试数据。

Sub CopyRange()
'Copy range: suppose B1 and B2 are empty, B3 to B10 are filled with anything
'e.g. with some numbers
  ActiveSheet.Range("B1:B10").Copy
'Create new workbook
  Workbooks.Add

'NOTE: I need to create a workbook with generic name, save the name and pass it 
'to another program - just to clarity why I don't do it all in one shot at .Copy
  csvPath = TEMP & "\" & ActiveWorkbook.Name & ".csv"

'Paste copied data to the newly created workbook
'NOTE: so far it keeps B1 and B2 empty
  ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, _
    Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'Save the workbook as CSV
  ActiveWorkbook.SaveAs Filename:=csvPath, FileFormat:=xlCSV, _
    ReadOnlyRecommended:=False, CreateBackup:=False
'At this point the saved file moves all data 2 cells up 
'to fill the empty spaces in B1 and N2. That's the issue!
End Sub

有趣的是,如果您选择多于一列,则它会保存空单元格并在正确的位置开始数据。

我尝试使用 xlPasteValues 而不是 xlPasteAll ,这实际上让事情变得更糟 - 现在它会跳过空单元格,即使你有超过 1 列,在 PasteSpecial 步骤。

我还尝试将其保存为 xlCSVMSDOS、xlCSVWindows(均使用“\r\n”行尾字符)和 xlCSVMac(使用“\n|”EOL 字符)。没有任何效果。

请帮忙!

PS我也尝试过使用这个步骤中描述的方法,仍然没有运气。

4

1 回答 1

2

保存为 CSV 时,Excel 似乎将UsedRange用于工作表。

您可以通过对范围应用一些格式来人为地扩展 UsedRange。例如,在保存之前添加此行将使其保存整个范围。

ActiveSheet.Range("A1:A10").Interior.ColorIndex = 7

所以只是为了在上下文中给你它,你的 sub 的结尾是这样的:

ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, _
 Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'Apply some color to the range so that it all gets saved in the CSV.
ActiveSheet.Range("A1:A10").Interior.ColorIndex = 7
'Save the workbook as CSV
ActiveWorkbook.SaveAs Filename:=csvPath, FileFormat:=xlCSV, _
        ReadOnlyRecommended:=False, CreateBackup:=False
'Sheet gets saved as is with cell locations preserved.
End Sub
于 2013-01-25T20:08:37.117 回答