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

我创建了一个包含一些数据的报告。 我不希望用户必须单击表单导出按钮并将数据导出到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(); } 

有什么建议?

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

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

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

所以在对这件事做了很多工作之后我发现改变了这一行:

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

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

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