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格式无效的主要内容,如果未能解决你的问题,请参考以下文章
导出EXCEL时 类range的PasteSpecial方法无效是啥原因。