Excel 文件创建为只读
Excel File created as read only
我在 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);
}
}
所以我认为你的问题是 Workbooks.Add()。看看微软是怎么说的:
[Workbooks.Add()] Determines how the new workbook is created. If this argument is a string specifying the name of an existing Microsoft Excel file, the new workbook is created with the specified file as a template.
我相信您正在创建的工作簿是 Sharepoint 服务器拥有的任何内容(包括权限)的副本。它在本地工作的事实是另一个线索,表明 Sharepoint 可能在摆弄权限。
我建议尝试在本地保存一份文件副本。您甚至可以使用 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
作为文件路径以编程方式打开新保存的工作簿。
对于您提到的两种方式:
将共享点库设置为安全源 - 这可以通过设置 excel 设置来实现:选项 -> 信任中心 -> 信任中心设置 -> 受信任的位置 ->添加共享点位置
在进程结束时设置文件访问权限 (readonly=false)
实际上作为处理模板文件的一般做法(不限于excel),系统应该将模板文件复制到本地临时位置(最好是运行用户的TEMP文件夹) , 使用它然后删除它。这样可以避免各种问题,例如 file-lock-by-other-user/process 问题。
我在 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);
}
}
所以我认为你的问题是 Workbooks.Add()。看看微软是怎么说的:
[Workbooks.Add()] Determines how the new workbook is created. If this argument is a string specifying the name of an existing Microsoft Excel file, the new workbook is created with the specified file as a template.
我相信您正在创建的工作簿是 Sharepoint 服务器拥有的任何内容(包括权限)的副本。它在本地工作的事实是另一个线索,表明 Sharepoint 可能在摆弄权限。
我建议尝试在本地保存一份文件副本。您甚至可以使用 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
作为文件路径以编程方式打开新保存的工作簿。
对于您提到的两种方式:
将共享点库设置为安全源 - 这可以通过设置 excel 设置来实现:选项 -> 信任中心 -> 信任中心设置 -> 受信任的位置 ->添加共享点位置
在进程结束时设置文件访问权限 (readonly=false)
实际上作为处理模板文件的一般做法(不限于excel),系统应该将模板文件复制到本地临时位置(最好是运行用户的TEMP文件夹) , 使用它然后删除它。这样可以避免各种问题,例如 file-lock-by-other-user/process 问题。