我将数据从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);
这会改变格式。如果我选择是继续打开它会给我正确的数据。 我一直试图找出一种方法,以便生成的数据相同,但不会弹出更改格式的警告。请提出建议?
答案 0 :(得分:1)
答案 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显示警告之前。