Установка формулы для диапазона в Excel невозможна в C #, если диапазон больше 1 - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь автоматизировать вставку некоторых формул в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...