C#导出为Excel格式无效
我正在尝试将datagrid的数据导出到C#中的excel工作表中。使用下面的代码,我成功地导出了它C#导出为Excel格式无效,c#,sql-server,excel,C#,Sql Server,Excel,我正在尝试将datagrid的数据导出到C#中的excel工作表中。使用下面的代码,我成功地导出了它 private void ExportToExcelAndCsv() { dataGrid.SelectAllCells(); dataGrid.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader; ApplicationCommands.C
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中相同的格式?您可能需要将单元格格式化为文本。看看这个问题:
我假设网格中的这些数据来自基于问题标签的SQL查询或表。如果是这种情况,并且数据是只读的,或者数据位于绑定到网格的datatable中,那么实现这一点的简单方法是使用EPPlus而不是interop EPPlus有一个命令可以将C#datatable(System.Data.datatable)导出到电子表格中:
ws.Cells["A1"].LoadFromDataTable(dt, true);
而且,根据您最初的问题,它尊重数据类型,这意味着它不会在包含所有数字的文本字段上删除前导零,不会将看起来像日期的文本转换为日期等
如果不使用datatable,则始终可以将内容转换为datatable(尽管这种方法有很多开销)
如果您与interop联姻,则只需确保在粘贴之前将适当的列格式化为文本即可:
sheet.Range["A:A"].NumberFormat = "@";
如果链接失效,这个答案将毫无用处。你应该从中剪下相关的文字,并把它放在你的答案中。谢谢,我把答案改成了更好的