C#导出为Excel格式无效

Posted

技术标签:

【中文标题】C#导出为Excel格式无效【英文标题】:C# exporting to Excel format invalid 【发布时间】:2020-01-03 01:12:33 【问题描述】:

我正在尝试将 datagrid 的数据导出到 C# 中的 Excel 工作表。使用下面的代码我成功导出了它

private void ExportToExcelAndCsv()
        
            dataGrid.SelectAllCells();
            dataGrid.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
            ApplicationCommands.Copy.Execute(null, dataGrid);
            String resultat = (string)Clipboard.GetData(DataFormats.CommaSeparatedValue);
            String result = (string)Clipboard.GetData(DataFormats.Text);
            dataGrid.UnselectAllCells();
            System.IO.StreamWriter file1 = new System.IO.StreamWriter(@"C:\Users\Fisniku\Desktop\"+tipiL+".xls");
            file1.WriteLine(result.Replace(',', ' '));
            file1.Close();
         

我的问题是我在 SQLServer 中有一个字符串数据类型的列,其中包含分数格式的数据,例如:

1/2
2/2
1/3
9/4

在 Excel 中导出数据时,该列变为日期,并以自定义格式显示日期 01-Jan 等数据。

尝试将excel中的列修改为文本格式后,丢失值,失效。

如何修改代码,使其保持与 datagrid 中相同的格式?

【问题讨论】:

【参考方案1】:

我假设网格中的这些数据源自基于您问题标签的 SQL 查询或表。如果是这种情况,并且数据是只读的,或者数据位于绑定到网格的数据表中,那么实现此目的的一种简单方法是使用 EPPlus 而不是互操作。

EPPlus 有一个命令可以将 C# 数据表 (System.Data.DataTable) 导出到电子表格中:

ws.Cells["A1"].LoadFromDataTable(dt, true);

而且,根据您最初的问题,它尊重数据类型,这意味着它不会破坏包含所有数字的文本字段上的前导零,也不会将看起来像日期的文本转换为日期等。

如果您不使用数据表,则始终可以将您的内容转换为数据表(尽管这种方法有很多开销)。

如果您与互操作结婚,那么请确保在粘贴之前将相应的列格式化为文本:

sheet.Range["A:A"].NumberFormat = "@";

【讨论】:

【参考方案2】:

您可能需要将单元格设置为文本格式。看看这个问题: Format an Excel column (or cell) as Text in C#?

【讨论】:

如果链接失效,这个答案将毫无用处。您应该从中剪下相关文本并将其放入您的答案中。 谢谢Tab,我把答案改成了更好的

以上是关于C#导出为Excel格式无效的主要内容,如果未能解决你的问题,请参考以下文章

C#中无效的Resx文件。

excel文件格式和扩展名不匹配.文件可能已损坏怎么办

excel无法打开文件因文件格式或文件扩展名无效

导出EXCEL时 类range的PasteSpecial方法无效是啥原因。

C#在win7系统 iis部署asp.net导出excel功能报错

c#导出excel,设置单元格存储格式为数值类型