将数据导出到网格中的Excel

时间:2014-01-10 10:18:37

标签: c# wpf winforms

我将数据从WPF datagrid导出到我的应用程序中的excel工作表。这是我到达的代码片段。

dgDisplay.SelectAllCells();
dgDisplay.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
ApplicationCommands.Copy.Execute(null, dgDisplay);
//String resultat = (string)Clipboard.GetData(DataFormats.CommaSeparatedValue);
String result = (string)Clipboard.GetData(DataFormats.Text);
dgDisplay.UnselectAllCells();
string path = Environment.CurrentDirectory + "\\Reports\\SampleReport.xls";
System.IO.StreamWriter file1 = new System.IO.StreamWriter(@path);
file1.WriteLine(result.Replace(',', ' '));
file1.Close();

现在可以使用预期数据创建excel文件。但是通过代码打开或使用excel。打开时会收到以下警告

enter image description here

虽然可能有其他原因导致类似错误,但我认为这是由于以下2行

String result = (string)Clipboard.GetData(DataFormats.Text);

这会改变格式。如果我选择是继续打开它会给我正确的数据。 我一直试图找出一种方法,以便生成的数据相同,但不会弹出更改格式的警告。请提出建议?

4 个答案:

答案 0 :(得分:1)

您无法将简单文本写入Excel .xlsx文件。

选项1:您编写.csv文件并在Excel中打开它。

选项2:您使用libraby编写正确的.xlsx文件,例如ClosedXML

答案 1 :(得分:1)

您为文件提供的 .xls 扩展名是为二进制Excel(BIFF8)格式保留的。您正在保存分隔的文本文件,该文件的扩展名应为 .csv 。尝试更改文件名,它应该可以工作。

如果要以专用的二进制Excel格式生成文件,则必须进行手动操作并使用库,例如​​: ExcelLibrary

答案 2 :(得分:0)

这是适合我的代码。按要求更新。

private void StartCreatingReport(DataGrid dgDisplay)
    {

        dgDisplay.SelectAllCells();
        dgDisplay.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
        ApplicationCommands.Copy.Execute(null, dgDisplay);
        String result = (string)Clipboard.GetData(DataFormats.CommaSeparatedValue);           
        dgDisplay.UnselectAllCells();

        string path = Environment.CurrentDirectory + "\\Reports\\SampleReport.csv";



        System.IO.StreamWriter file1 = new System.IO.StreamWriter(@path);

        file1.WriteLine(result);
        file1.Close();
    }

我将必须导出到excel的任何网格传递给此方法。我还在路径中放置了一个csv文件(在本例中为SampleReport.csv)

答案 3 :(得分:0)

我使用代码,但每行都存储在一个单元格(A1)中,每个字段都有逗号分隔

但是当我使用GetData(DataFormats.Text)时,每个字段都有一列,但在Excel显示警告之前。