1

我现在正在努力完成这项工作一个星期,但我仍然迷路了。所以基本上我有一个从 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");

但是我打开它时看不到变化...

4

0 回答 0