Файл Excel создан только для чтения - PullRequest
0 голосов
/ 06 марта 2019

Я создал надстройку Excel, используя VSTO в C #. Я хочу создать новый файл Excel из шаблона, расположенного на сайте SharePoint. Используется диалоговое окно выбора файла, чтобы пользователь мог выбрать, какой файл использовать в качестве шаблона. Все работает отлично, за исключением того, что новая рабочая книга создана только для чтения. Если я скопирую файл шаблона на свой компьютер и использую ту же программу, чтобы выбрать этот файл в качестве шаблона, новая книга не будет создана как доступная только для чтения.

Файл на sharePoint не открывается, остальное при создании нового файла. Есть ли способ указать, что библиотека sharePoint является безопасным источником? Или установить для свойства только для чтения созданной рабочей книги значение false?

{

string pathSP= @”\\Business.sharepoint.com@SSL\teams\group\NDC\”;

if (System.IO.Directory.Exists(pathSP))
{
    Excel.Application excelObj = Globals.ThisAddIn.Application;
    Office.FileDialog fileDialog = excelObj.FileDialog[Office.MsoFileDialogType.msoFileDialogFilePicker];
    fileDialog.InitialFileName = initialPath;
    fileDialog.AllowMultiSelect = false;
    fileDialog.InitialView = Office.MsoFileDialogView.msoFileDialogViewDetails;
    fileDialog.Title = "Create Excel file from template";
    fileDialog.Filters.Clear();
    fileDialog.Filters.Add("Excel template", "*.xls; *.xlsx; *.xlsm; *.xltx; *.xltm; *.xlt", 1);
    string TemplatePath;

    if (fileDialog.Show() == -1)
    {
        templatePath = fileDialog.SelectedItems.Item(1);
        fileDialog = null; 
    }
    else
    {
        templatePath=""
        fileDialog = null;
    }


    if (templatePath != "")
    {
        Excel.Workbook ws= excelObj.Workbooks.Add(templatePath);
    }

}     
else
{
    MessageBox.Show("SharePoint site is not available", "Create Excel file from template", MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
}

}

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

для двух упомянутых вами способов:

  1. установить библиотеку точки общего доступа в качестве безопасного источника - этого можно достичь, установив параметр Excel: Параметры -> Центр управления безопасностью -> Настройки центра управления безопасностью -> Надежные расположения -> Добавить местоположение общего ресурса

  2. установить доступ к файлу (readonly = false) в конце вашего процесса

На самом деле, как правило, при работе с файлом шаблона (не ограничиваясь Excel) система должна скопировать файл шаблона в локальное временное местоположение (в идеале, в папку TEMP работающего пользователя), использовать его и затем удалить. таким образом можно избежать всевозможных проблем, таких как проблемы с блокировкой файлов другими пользователями / процессами.

0 голосов
/ 06 марта 2019

Так что я думаю, что ваша проблема в Workbooks.Add ().Посмотрите, что Microsoft говорит по этому поводу:

[Workbooks.Add ()] Определяет, как создается новая книга.Если этот аргумент является строкой, указывающей имя существующего файла Microsoft Excel, новая книга создается с указанным файлом в качестве шаблона.

Я считаю, что создаваемая вами книга является копиейвсего, что имеет сервер sharepoint, включая разрешения.Тот факт, что он работает локально, является еще одним признаком того, что sharepoint может возиться с разрешениями.

Я предлагаю попробовать сохранить копию файла локально.Вы даже можете использовать объект SaveFileDialog, чтобы предоставить пользователю графический интерфейс для сохранения его новой копии.

SaveFileDialog userSaveFileDialog = new SaveFileDialog();  
userSaveFileDialog.Filter = "Excel 2007 and later | *.xlsx, Excel Macro Enabled Worksheet | *.xlsm, I'm guessing this is a 2007 template | *.xltx, Template Macro maybe | *.xltm, I almost definitely think this is a template file | *.xlt";  
userSaveFileDialog.Title = "Save an Excel File";  
userSaveFileDialog.ShowDialog();  
this.Application.ActiveWorkbook.SaveCopyAs(@userSaveFileDialog.FileName);

Как только вы закончите, вы можете программно открыть вновь сохраненную книгу, используя userSaveFileDialog.FileName в качестве пути к файлу.

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