朋友,C#noob在这里,所以提前道歉!
我有以下方法循环我的Excel工作簿表作为数据表通过字符串生成器输出将其转换为CSV。
public static string ToCSV(this DataTable table)
{
var result = new StringBuilder();
for (int i = 0; i < table.Columns.Count; i++)
{
result.Append(table.Columns[i].ColumnName);
result.Append(i == table.Columns.Count - 1 ? "\n" : ",");
}
foreach (DataRow row in table.Rows)
{
for (int i = 0; i < table.Columns.Count; i++)
{
result.Append(row[i].ToString());
result.Append(i == table.Columns.Count - 1 ? "\n" : ",");
}
}
return result.ToString();
}
如果Excel文件是干净的,这可以正常工作。像这样:
但是,如果您向Excel文件添加任何格式或任何内容,C#方法会将单元格视为包含内容并将其输出到CSV文件。
像这样:
我试过这样做并检查行的长度......
if (String.IsNullOrWhiteSpace(row[i].ToString()))
{
continue;
}
...但它打破了文件的结构。
问题;我究竟做错了什么?!我觉得我很近,但它只是没有表现。
提前感谢您的协助。
答案 0 :(得分:0)
if (row[i] == DBNull.Value || String.IsNullOrWhiteSpace(row[i].ToString()))
{
continue;
}
答案 1 :(得分:0)
从excel文件创建数据表时,您可以检查workheet.FirstColumnUsed,worksheet.LastColumnUsed同样适用于行。这样,您将只获得包含记录的行和列。
如果您使用ClosedXML读取Excel文件,那么我猜他们提供了UsedRange(), FirstRowUsed,LastRowUsed属性。 有关详细信息:ClosedXML GITHUB repository
如果您使用interop api阅读excel文件,则此答案可能会有所帮助:Stackoverflow:Remove empty row and column