Я пытаюсь автоматизировать вставку некоторых формул в Excel с помощью C #.Проблема в том, что функция работает до тех пор, пока Range имеет размер 1. Поэтому задаем формулу для:
с формулой: "= IF (B2 =" ", 0,1)"
начальная ячейка: «А2»
конечная ячейка: «А2»
public static string SetFormula(string formula, string startingCell, string endingCell)
{
try
{
Range range = worksheet.Range[startingCell, endingCell].Cells;
foreach(Range cell in range.Rows)
{
cell.Formula = formula;
}
}
catch (Exception e)
{
return e.Message;
}
return SUCCESS;
}
это работает безупречно.
Я пытался ранее установить весь диапазон сразу
public static string SetFormula(string formula, string startingCell, string endingCell)
{
try
{
worksheet.Range[startingCell, endingCell].Formula= formula;
}
catch (Exception e)
{
return e.Message;
}
return SUCCESS;
}
но все это заканчивается следующей ошибкой при выполнении, как только диапазон расширяется более чем на 1 ячейку.
private static Application application;
private static Workbook workbook;
private static Worksheet worksheet;
private const string SUCCESS = "success";
public static void InitExcelConnection()
{
try
{
application = (Application)Marshal.GetActiveObject("Excel.Application");
application.Visible = true;
application.DisplayAlerts = false;
}
catch (COMException e)
{
application = new Application();
application.Visible = true;
application.DisplayAlerts = false;
}
}
public static string OpenWorkbookAndSheet(string filepath, string sheetname)
{
try
{
workbook = application.Workbooks.Open(filepath);
worksheet = workbook.Sheets[sheetname];
worksheet.Activate();
return SUCCESS;
}
catch (Exception e)
{
return e.Message;
}
}
public static string SetFormula(string formula, string startingCell, string endingCell)
{
try
{
Range range = worksheet.Range[startingCell, endingCell].Cells;
foreach(Range cell in range.Rows)
{
cell.Formula = formula;
}
}
catch (Exception e)
{
return e.Message;
}
return SUCCESS;
}
public static long GetRowNumber()
{
return worksheet.Cells.Find("*", System.Reflection.Missing.Value,
System.Reflection.Missing.Value, System.Reflection.Missing.Value,
XlSearchOrder.xlByRows, XlSearchDirection.xlPrevious,
false, System.Reflection.Missing.Value, System.Reflection.Missing.Value).Row;
}
public static string SaveWorkbook()
{
try
{
workbook.Save();
}
catch (Exception e)
{
return e.Message;
}
return SUCCESS;
}
public static string CloseExcel()
{
try
{
application.DisplayAlerts = true;
application.Workbooks.Close();
application.Quit();
Marshal.ReleaseComObject(worksheet);
Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(application);
return SUCCESS;
}
catch (Exception e)
{
return e.Message;
}
}
}
Exception to HRESULT: 0x800A03EC
Ausnahme von HRESULT: 0x800A03EC