Member 14100488 Ответов: 1

Добавление надстройки для excel на языке C#


Я пытаюсь сделать надстройку C# Excel, чтобы автоматизировать вычисление значения некоторых ячеек.Что должен делать аддин, так это когда флажок установлен, он должен умножить значение ячейки с другими ячейками и вставить результат в разные ячейки.Ошибка, которую я получаю, заключается в том, что "не удается преобразовать null в int, потому что это не тип значения, не допускающий обнуления".Когда Excel открывается, я ставлю цифры, и после того, как я ставлю галочку в этом поле, я получаю эту ошибку.Из того, что я понимаю, эта строка кода получает null из Excel:

int cellValue = sheet.Cells[1, 12].Value2;


Я попытался в первом варианте своего кода открыть конкретную книгу Excel, но это не сработало.Он открывает новый пустой файл Excel.Устранение
var excelApp = new Excel.Application() as Excel._Application;

также появляется новая ошибка:
Цитата:
Ссылка на объект необходима для метода или свойства нестатического поля.


Что я уже пробовал:

Я попробовал это 2 варианта.Я получаю ту же ошибку.


public void fc(string[] args)
        {
           

            string dataFilePath = new FileInfo(args[0]).FullName;
          
            string excelTemplateFilePath = Path.Combine(
               Path.GetDirectoryName(dataFilePath),
               "informations.xlsx");
            var excelApp = new Excel.Application() as Excel._Application;
            Excel.Workbook workbook = excelApp.Workbooks.Open(excelTemplateFilePath);
            Excel.Worksheet worksheet = workbook.Sheets[1];
            var dataRange = worksheet.get_Range("A20");
            dataRange.Value2 = 0.5;
            string baseFileName = Path.Combine(
              Path.GetDirectoryName(dataFilePath),
              Path.GetFileNameWithoutExtension(dataFilePath));
            string excelFilePath = baseFileName + ".xlsx";
            for (int i = 0; i <= worksheet.Cells.Count; i++)
            {
                for (int j = 0; j <= worksheet.Cells.Count; j++)
                {
                    while (worksheet.Cells[i+1, 7] != null)
                    {
                        (worksheet.Cells[i+1, 8] as Excel.Range).Value2 = worksheet.Cells[i+1, 7] * dataRange.Value2;
                    }
                }
            }
            System.Diagnostics.Process.Start(excelFilePath);
        }





if (((RibbonCheckBox)sender).Checked)
        {
            try
            {
                Excel.Application app = new Excel.Application();
                app.Workbooks.Add();
                Excel.Worksheet sheet = app.ActiveSheet;
                int cellValue = sheet.Cells[1, 12].Value2;
                for (int i = 0; i <= sheet.Cells.Count; i++)
                {
                    for (int j = 0; j <= sheet.Cells.Count; j++)
                    {
                        while (sheet.Cells[i + 1, 7] != null)
                        {
                            sheet.Cells[i + 1, 8].Value2 = sheet.Cells[i + 1, 7] * cellValue;
                        }
                    }
                }
            }
            catch(Exception ex)
            {

                MessageBox.Show("Exceptie:" + ex);

            }

1 Ответов

Рейтинг:
1

Maciej Los

Лучший способ решить вашу проблему-это использовать отладчик[^].

Что касается первого сообщения об ошибке:

Цитата:
Не удается преобразовать значение null в int, поскольку он не является типом, поддерживающим значение null

Да, это может означать, что sheet.Cells[1, 12].Value2 имеет значение, допускающее значение null.

Что касается второго сообщения об ошибке: вам не нужно создавать еще один экземпляр приложения Excel. Вы должны работать с текущим экземпляром приложения Excel, так как в нем хранятся текущие открытые файлы.