将 xls 文件转换为 csv,但添加了额外的行?

APr*_*ugh 1 vb.net csv excel

所以,我正在尝试将一些 xls 文件转换为 csv,除了一部分之外,一切都很好。Excel 互操作中的 SaveAs 函数似乎导出所有行(包括空白行)。当我使用记事本查看文件时,我可以看到这些行。(我期望的所有行,有两个单引号的 15 行,然后其余的都是空白的)。然后我有一个存储过程,它接受这个 csv 并导入到所需的表中(这适用于已手动转换为 csv 的电子表格(例如打开、文件-> 另存为等)

这是我在代码中用于 SavesAs 的代码行。我曾尝试将 xlCSV、xlCSVWindows 和 xlCSVDOS 作为我的文件格式,但它们都做同样的事情。

wb.SaveAs(aFiles(i).Replace(".xls", "B.csv"), Excel.XlFileFormat.xlCSVMSDOS, , , , False) 'saves a copy of the spreadsheet as a csv
Run Code Online (Sandbox Code Playgroud)

那么,是否有一些额外的步骤/设置我需要做才能让多余的行显示在 csv 中?

请注意,如果我打开这个新创建的 csv,然后单击另存为,并选择 csv,我的程序会再次喜欢它。

Dan*_*iel 5

当您从工作簿创建 CSV 时,将根据您的 UsedRange 生成 CSV。由于可以通过将格式应用于单元格(没有任何内容)来扩展 UsedRange,这就是为什么您会得到空白行。(由于此问题,您还可以获得空白列。)

当您打开生成的 CSV 时,由于没有内容或格式(因为只有值保存在 CSV 中),所有这些无内容单元格都不再对 UsedRange 做出贡献。

您可以通过在保存之前更新您使用的范围来更正此问题。这是我在 VBA 中编写的一个简短的子程序,可以解决问题。这段代码会让你失去所有格式,但我认为这并不重要,因为你无论如何都要保存到 CSV。我会将转换为 VB.Net 留给您。

Sub CorrectUsedRange()
    Dim values
    Dim usedRangeAddress As String
    Dim r As Range
    'Get UsedRange Address prior to deleting Range
    usedRangeAddress = ActiveSheet.UsedRange.Address
    'Store values of cells to array.
    values = ActiveSheet.UsedRange
    'Delete all cells in the sheet
    ActiveSheet.Cells.Delete
    'Restore values to their initial locations
    Range(usedRangeAddress) = values
End Sub
Run Code Online (Sandbox Code Playgroud)