Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#导出为Excel格式无效_C#_Sql Server_Excel - Fatal编程技术网

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

我正在尝试将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中相同的格式?

您可能需要将单元格格式化为文本。看看这个问题:

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

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

ws.Cells["A1"].LoadFromDataTable(dt, true);
而且,根据您最初的问题,它尊重数据类型,这意味着它不会在包含所有数字的文本字段上删除前导零,不会将看起来像日期的文本转换为日期等

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

如果您与interop联姻,则只需确保在粘贴之前将适当的列格式化为文本即可:

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

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