在 UWP 中使用 OPEN-XML SDK 生成 Doc 文件
Generate Doc file using OPEN-XML SDK in UWP
我想在我的 UWP 应用程序中创建一个 Microsoft Word 文档,并且我已经在应用程序本地文件夹中成功创建了文档文件。但我想在用户选择的特定文件夹位置创建此文档文件。
I mean user browse a location and then create doc file into that
location.
这是我在 App 本地路径中创建 Doc 文件的代码:
string docFileName = "TestDoc.docx";
Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
string Filepath = localFolder.Path + "\" + docFileName;
using (var wordprocessingDocument = WordprocessingDocument.Create(file.Path, DocumentFormat.OpenXml.WordprocessingDocumentType.Document))
{
MainDocumentPart mainPart = wordprocessingDocument.AddMainDocumentPart();
mainPart.Document = new DocumentFormat.OpenXml.Wordprocessing.Document();
Body body = mainPart.Document.AppendChild(new Body());
DocumentFormat.OpenXml.Wordprocessing.Paragraph para = body.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Paragraph());
DocumentFormat.OpenXml.Wordprocessing.Run run = para.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Run());
run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text("Hello !!! ."));
wordprocessingDocument.MainDocumentPart.Document.Save();
}
尝试在如下特定位置创建 doc 文件时出现以下错误:
错误
Message=The media is write protected : 'D:\Training\TestDoc.docx'
代码
string path = @"D:\Training\TestDoc.docx";
using (var wordprocessingDocument = WordprocessingDocument.Create(path, DocumentFormat.OpenXml.WordprocessingDocumentType.Document))
{
MainDocumentPart mainPart = wordprocessingDocument.AddMainDocumentPart();
mainPart.Document = new DocumentFormat.OpenXml.Wordprocessing.Document();
Body body = mainPart.Document.AppendChild(new Body());
DocumentFormat.OpenXml.Wordprocessing.Paragraph para = body.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Paragraph());
DocumentFormat.OpenXml.Wordprocessing.Run run = para.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Run());
run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text("Hello !!! ."));
wordprocessingDocument.MainDocumentPart.Document.Save();
}
因为 UWP 应用程序 运行 在沙箱中,您无法使用经典 APIs 直接访问文件系统路径。但是,您可以使用 Windows.Storage
API 来执行此操作。
让用户选择保存文件
如果想让用户选择保存文件,可以使用FileSavePicker
API。 This Docs page 详细描述了这一点。完成后,API 会给你一个 StorageFile
实例,你可以使用它。
写入文件
由于您不能使用将文件路径作为参数的 Create
方法,因此您需要使用基于 Stream
的方法。
要从文件中获取 Stream
实例,请将 using System.IO;
添加到代码文件的顶部,然后执行:
using(var stream = await file.OpenStreamForWriteAsync())
使用此流,您可以执行以下操作:
using (var wordprocessingDocument =
WordprocessingDocument.Create(
stream, WordprocessingDocumentType.Document))
{
//... your code
}
注意:广泛的文件系统访问
如果您确实需要在任意(不是用户选择的)位置创建文件,您可以使用 broadFileSystemAccess
capability。然而,这仅适用于真正需要它的应用程序。请注意,即使具有此功能,您仍然需要使用 StorageFile
和 StorageFolder
API 执行所有文件操作。
我想在我的 UWP 应用程序中创建一个 Microsoft Word 文档,并且我已经在应用程序本地文件夹中成功创建了文档文件。但我想在用户选择的特定文件夹位置创建此文档文件。
I mean user browse a location and then create doc file into that location.
这是我在 App 本地路径中创建 Doc 文件的代码:
string docFileName = "TestDoc.docx";
Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
string Filepath = localFolder.Path + "\" + docFileName;
using (var wordprocessingDocument = WordprocessingDocument.Create(file.Path, DocumentFormat.OpenXml.WordprocessingDocumentType.Document))
{
MainDocumentPart mainPart = wordprocessingDocument.AddMainDocumentPart();
mainPart.Document = new DocumentFormat.OpenXml.Wordprocessing.Document();
Body body = mainPart.Document.AppendChild(new Body());
DocumentFormat.OpenXml.Wordprocessing.Paragraph para = body.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Paragraph());
DocumentFormat.OpenXml.Wordprocessing.Run run = para.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Run());
run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text("Hello !!! ."));
wordprocessingDocument.MainDocumentPart.Document.Save();
}
尝试在如下特定位置创建 doc 文件时出现以下错误:
错误
Message=The media is write protected : 'D:\Training\TestDoc.docx'
代码
string path = @"D:\Training\TestDoc.docx";
using (var wordprocessingDocument = WordprocessingDocument.Create(path, DocumentFormat.OpenXml.WordprocessingDocumentType.Document))
{
MainDocumentPart mainPart = wordprocessingDocument.AddMainDocumentPart();
mainPart.Document = new DocumentFormat.OpenXml.Wordprocessing.Document();
Body body = mainPart.Document.AppendChild(new Body());
DocumentFormat.OpenXml.Wordprocessing.Paragraph para = body.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Paragraph());
DocumentFormat.OpenXml.Wordprocessing.Run run = para.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Run());
run.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Text("Hello !!! ."));
wordprocessingDocument.MainDocumentPart.Document.Save();
}
因为 UWP 应用程序 运行 在沙箱中,您无法使用经典 APIs 直接访问文件系统路径。但是,您可以使用 Windows.Storage
API 来执行此操作。
让用户选择保存文件
如果想让用户选择保存文件,可以使用FileSavePicker
API。 This Docs page 详细描述了这一点。完成后,API 会给你一个 StorageFile
实例,你可以使用它。
写入文件
由于您不能使用将文件路径作为参数的 Create
方法,因此您需要使用基于 Stream
的方法。
要从文件中获取 Stream
实例,请将 using System.IO;
添加到代码文件的顶部,然后执行:
using(var stream = await file.OpenStreamForWriteAsync())
使用此流,您可以执行以下操作:
using (var wordprocessingDocument =
WordprocessingDocument.Create(
stream, WordprocessingDocumentType.Document))
{
//... your code
}
注意:广泛的文件系统访问
如果您确实需要在任意(不是用户选择的)位置创建文件,您可以使用 broadFileSystemAccess
capability。然而,这仅适用于真正需要它的应用程序。请注意,即使具有此功能,您仍然需要使用 StorageFile
和 StorageFolder
API 执行所有文件操作。