我创建了一个包含一些数据的报告。我不希望用户必须单击表单导出按钮并将数据导出到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();
}
有什么建议吗?
答案 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文件都会破坏数据。