如何直接导出到报表查看器中的Word文档

时间:2012-08-29 18:13:08

标签: c# reportviewer

我创建了一个包含一些数据的报告。我不希望用户必须单击表单导出按钮并将数据导出到word文档。该文件可以很好地解决问题,当我打开文档时,它只是一堆垃圾,而不是应该保存的报告。

我的保存按钮如下所示:

SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.InitialDirectory = @“C:\”;
saveFileDialog.RestoreDirectory = true;
savefileDialog.Title = “Browse Text Files”;
saveFileDialog.DefaultExt = “docx”;

saveFileDialog.Filter = “Word Doc (*.docx)|*.docx|PDF (*.pdf)| *.pdf”;
saveFileDialog.checkFileExists = false;
saveFileDialog.CheckPathExists = true;

Warning[] warnings;
string[] streams;
string mimeType;
string encoding;
string extension;

byte[] bytes = reportViewer1.LocalReport.Render(“Word”, null, out mimeType, out encoding, out extension, out streams, out warnings);

if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
var filename = saveFileDialog.FileName;
System.IO.FileStream file = new FileStream(filename, FileMode.Create);
file.Write(bytes, 0, bytes.length);
file.close();
}

有什么建议吗?

3 个答案:

答案 0 :(得分:10)

我知道这已经过时了,已经回答了(有点),但我偶然发现了这个问题,你需要在渲染调用中使用“WORDOPENXML”代替“Word”。这样它就会导出到docx。

使用ListRenderingExtensions查看可用的扩展名。

答案 1 :(得分:3)

仅适用于Word的LocalReport.Render导出为较旧的Word格式(我相信版本6)。不支持基于XML(docx扩展)的更新的开放格式。因此,通过使用docx扩展,Word期望更新的格式,而不是旧格式,因此它将所有内容都解释为垃圾。顺便说一句,将Word文档上的docx扩展名更改为.zip,提取内容并围绕生成的文件夹进行操作。现在可见的是非常有趣的。

答案 2 :(得分:1)

所以在对这件事做了大量工作后,我发现改变了这一行:

saveFileDialog.Filter = “Word Doc (*.docx)|*.docx|PDF (*.pdf)| *.pdf”; 

saveFileDialog.Filter = “Word Doc (*.doc)|*.doc|PDF (*.pdf)| *.pdf”; 

解决了我的问题。无论出于何种原因,保存到.docx文件都会破坏数据。