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

所以,我试图将一些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 

那么,有没有额外的步骤/设置我需要做的,以避免在csv中出现extraneuos行?

请注意,如果我打开这个新创build的csv,然后单击另存为,然后selectcsv,我的过程再次喜欢它。

从工作簿创buildCSV时,将根据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 

用VBA和Excel2007testing你的代码 – 效果不错。

但是,我可以通过格式化数据单元下面的空单元格来粗略地复制它。 然后我会在csv中得到空的单引号。 但是,当我使用SaveAs时,情况也是如此。

所以,我的build议是清除所有非数据单元,然后保存你的文件。 这样你至less可以排除这个错误点。

恐怕这可能还不够。 似乎有一个Excel的错误,甚至删除非数据单元不足以防止他们被写为空单元格时保存为csv。

http://answers.microsoft.com/en-us/office/forum/office_2010-excel/excel-bug-save-as-csv-saves-previously-deleted/2da9a8b4-50c2-49fd-a998-6b342694681e