Excel文件创建为只读

时间:2019-03-06 02:24:22

标签: c# excel file readonly

我已经在C#中使用VSTO创建了一个Excel加载项。我想从位于SharePoint网站上的模板创建一个新的Excel文件。使用文件选择器对话框,以便用户可以选择将哪个文件用作模板。除了将新工作簿创建为只读外,其他所有工作都很好。如果我将模板文件复制到计算机上,并使用相同的程序将该文件选为模板,则不会将新工作簿创建为只读。

创建新文件时,sharePoint上的文件未打开。有没有一种方法可以指定sharePoint库是安全的来源?还是将新创建的工作簿的readonly属性设置为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 :(得分:0)

所以我认为您的问题是Workbooks.Add()。看看微软对此有何评论:

  

[Workbooks.Add()]确定如何创建新工作簿。如果此参数是指定现有Microsoft Excel文件名称的字符串,则将使用指定文件作为模板来创建新工作簿。

我相信您正在创建的工作簿是共享点服务器拥有的所有内容(包括权限)的副本。它在本地工作的事实是共享点可能摆弄权限的另一个线索。

我建议尝试在本地保存文件的副本。您甚至可以使用SaveFileDialog对象为用户提供GUI来保存其新副本。

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作为文件路径以编程方式打开新保存的工作簿。

答案 1 :(得分:0)

您提到的两种方式:

  1. 将共享点库设置为安全来源-这可以通过设置excel设置来实现:选项->信任中心->信任中心设置->受信任位置->添加共享点位置

  2. 在过程结束时设置文件访问权限(readonly = false)

实际上,在处理模板文件(不限于excel)时,通常应将模板文件复制到本地临时位置(最好是运行用户的TEMP文件夹),使用该模板文件,然后再将其删除。这样可以避免各种问题,例如“其他用户的文件锁定/进程问题”。