【问题标题】:how not to skip empty first cell when saving as .CSV?保存为 .CSV 时如何不跳过空的第一个单元格?
【发布时间】:2013-01-25 19:36:09
【问题描述】:

我对数据保存到 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 字符)。没有任何效果。

请帮忙!

附:我也尝试使用this tread中描述的方法,但仍然没有运气。

【问题讨论】:

    标签: excel vba csv


    【解决方案1】:

    当另存为 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
    

    【讨论】:

    • 当我们谈到这个主题时,任何人都可以想出一种方法来覆盖 UsedRange 的默认用法吗?另外,知道为什么这只会在我们选择单列时成为问题吗?我的想法是,一旦您获得第二列,您的数据将在文本文件中如下所示:“,\r\n Data1,Data2 \r\n, Data3, Data4 \r\n ...” 所以逗号实际上表明那里有一个单元格。在列的情况下,数据将如下所示:“\r\n r\n\ Data1 \r\n Data2 \r\n ...”因此 Excel 会跳过前 2 行(行)。这听起来合理吗?
    • 我假设当您使用多列时,其中一列中实际上有数据。这不是真的吗?所有的列都是空白的,它仍然保存一个空白行吗?
    • 是的,没错。如果第一行是空白的,但您选择了多于 1 列,则它可以工作。
    猜你喜欢
    • 2021-06-19
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    相关资源
    最近更新 更多