Создайте файл Do c, используя OPEN- XML SDK в UWP - PullRequest
1 голос
/ 07 января 2020

Я хочу создать документ Microsoft Word в своем приложении UWP, и я успешно создал файл do c в локальной папке APP. Но я хочу создать этот файл do c в указанной папке c, выбранной пользователем.

Я имею в виду, что пользователь просматривает местоположение и затем создает файл do c в этом месте.

Вот мой код для создания файла Do c в локальном пути приложения:

  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();
  }

Ошибка ниже при попытке создать файл do c в указанном месте c, как показано ниже:

Ошибка

Сообщение = Носитель защищен от записи: 'D: \ Training \ TestDo c .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();
}

1 Ответ

2 голосов
/ 07 января 2020

Поскольку приложения UWP запускаются в изолированной программной среде, вы не можете напрямую обращаться к путям файловой системы, используя классовые c API. Однако для этого можно использовать Windows.Storage API.

Позволить пользователю выбрать файл сохранения

Если вы хотите, чтобы пользователь выбрал файл сохранения, вы можете использовать FileSavePicker API. На этой странице документов это подробно описано. После этого 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 возможность . Это, однако, только для приложений, которые действительно требуют этого. Обратите внимание, что даже с этой возможностью вам все равно нужно выполнять все файловые операции с использованием API StorageFile и StorageFolder.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...