我将数据从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 . 打开时我收到以下警告
虽然可能有其他原因导致类似的错误,但我认为这是由于以下2行
String result = (string)Clipboard.GetData(DataFormats.Text);
这会改变格式 . 如果我选择是继续打开它会给我正确的数据 . 我一直试图找出一种方法,以便生成的数据相同,但不会弹出更改格式的警告 . 请指教?
4 回答
您为文件提供的 .xls -extension保留为二进制Excel(BIFF8)格式 . 您正在保存分隔的文本文件,该文件的扩展名应为 .csv . 尝试更改文件名,它应该工作 .
如果要生成专用的二进制Excel格式的文件,则必须进行手动操作并使用库,例如: ExcelLibrary .
您不能将简单文本写入Excel
.xlsx
文件 .选项1:您编写
.csv
文件并在Excel中打开它 .选项2:使用libraby编写正确的
.xlsx
文件,例如ClosedXML这是适合我的代码 . 按要求更新 .
我将任何必须导出到excel的网格传递给此方法 . 我还在路径中放置了一个csv文件(本例中为SampleReport.csv)
我使用代码,但每行都存储在一个单元格(A1)中,并用逗号分隔每个字段
但是当我使用GetData(DataFormats.Text)时,每个字段都有一列,但在Excel显示警告之前 .