我已经在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);
}
}
答案 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)
您提到的两种方式:
将共享点库设置为安全来源-这可以通过设置excel设置来实现:选项->信任中心->信任中心设置->受信任位置->添加共享点位置
在过程结束时设置文件访问权限(readonly = false)
实际上,在处理模板文件(不限于excel)时,通常应将模板文件复制到本地临时位置(最好是运行用户的TEMP文件夹),使用该模板文件,然后再将其删除。这样可以避免各种问题,例如“其他用户的文件锁定/进程问题”。