我现在正在努力完成这项工作一个星期,但我仍然迷路了。所以基本上我有一个从 Sharepoint 打开的 Excel 文件,我想在其中进行一些更改并再次保存。
我打开它使用:
Excel.Workbook excelWorkbook;
using(Impersonator impersonator = new Impersonator())
{
Excel.Application excelApp = new Excel.ApplicationClass();
excelWorkbook = excelApp.Workbooks.Open(workbookPath,
Missing.Value,
true,
Missing.Value,
Missing.Value,
Missing.Value,
Missing.Value,
Missing.Value,
Missing.Value,
Missing.Value,
Missing.Value,
Missing.Value,
Missing.Value,
Missing.Value,
Missing.Value);
}
return excelWorkbook;
我认为目前这还不错。我正在使用 Impersonation 来获得打开它和所有内容的权利。
之后,我制作了一份副本,以便两个人可以同时在两个不同的 Excel 上工作。但这不是问题(我不这么认为)。
string savedPath = ExcelHelper.saveExcelWorkbookToTemp(filename, excelWorkbook);
//Closing first Excel and reopening the new one
ExcelHelper.closeExcelWorkbook(excelWorkbook);
Excel.Workbook excelWorkbookCurrent = ExcelHelper.openExcelWorkbook(savedPath);
首先,当我尝试打开一个特定的工作表(这里它被命名为“Paramètres”)时,我得到一个名为:Microsoft.Office.Interop.Excel.Worksheet {System.__ComObject} 的对象。这正常吗?我m 使用此功能打开工作表:
public static Excel.Worksheet openExcelWorkSheet(Excel.Workbook excelWorkbook, string name)
{
Excel.Worksheet worksheet;
using (Impersonator impersonator = new Impersonator())
{
//Excel.WorkSheets worksheets = excelWorkbook.Sheets;
//worksheet = (Excel.Worksheet)worksheets.get_Item(name);
worksheet = (Excel.Worksheet)excelWorkbook.Sheets["Paramètres"];
worksheet.Select(Type.Missing);
}
return worksheet;
}
之后,我尝试更改单元格值,但出现此错误:
- worksheet.Cells["A1"] 'worksheet.Cells["A1"]' 抛出类型为 'System.Runtime.InteropServices.COMException' 动态 {System.Runtime.InteropServices.COMException} 的异常或此错误,具体取决于方式我打电话给细胞... HRESULT 异常:0x800A03EC
你们知道我该如何克服这个问题吗?我不认为这是一个正确的问题,因为我正在使用管理员权限来做到这一点......
提前感谢。
PS:这是我修改单元格的功能
public static bool writeExcelCell(Excel.Worksheet worksheet, string cellName, string cellValue)
{
bool written = false;
using (Impersonator impersonator = new Impersonator())
{
try
{
worksheet.Cells[cellName] = cellValue;
written = true;
}
catch (Exception e)
{
written = false;
}
}
return written;
}
编辑:没有错误:
worksheet.get_Range("A1").Value = "AAA";
worksheet.get_Range("A3").Value2 = "BBB";
worksheet.get_Range("A2").set_Value(Type.Missing, "test");
但是我打开它时看不到变化...