5

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

有什么建议么?

4

3 回答 3

11

我知道这是旧的并且已经回答(有点),但我偶然发现了这个问题,你需要在渲染调用中使用“WORDOPENXML”而不是“Word”。这样它将导出到 docx。

使用 ListRenderingExtensions 查看可用的扩展。

于 2013-10-08T13:27:08.557 回答
3

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

于 2013-02-18T01:00:47.237 回答
1

因此,在对这件事进行了大量工作之后,我发现改变了这一行:

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

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

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

于 2012-08-29T21:00:45.790 回答