Member 11822400 Ответов: 1

У меня есть проблема с электронной таблицей Gem Box msi


Всем привет,
Мне нужно сделать менеджер Excel с C#, и я решаю использовать электронную таблицу Gem Box бесплатно

var ef = new ExcelFile();
            ef = ExcelFile.Load(File_Lettura);
            ExcelWorksheet ws = ef.Worksheets.ActiveWorksheet;

            int riga = 13;
            string s = (ws.Cells["B6"]).ToString();
            string[] r = s.Split('-');
            int c = 0;

            while (ws.Cells["B"+riga.ToString()].Value != null)
            {

                if (ws.Cells["F"+riga.ToString()].Value.ToString() != "")
                {
                    // add row
                    dgwFile.Rows.Add();

                    dgwFile.Rows[c].Cells[0].Value = r[0] + "-" + r[1] + "-" + ws.Cells["B"+riga.ToString()].Value.ToString();
                    dgwFile.Rows[c].Cells[1].Value = ws.Cells["D" + riga.ToString()].Value.ToString() + ws.Cells["G" + riga.ToString()].Value.ToString() + ws.Cells["H" + riga.ToString()].Value.ToString() + ws.Cells["I" + riga.ToString()].Value.ToString();
                    dgwFile.Rows[c].Cells[2].Value = ws.Cells["F" + riga.ToString()].Value.ToString();
                    dgwFile.Rows[c].Cells[3].Value = "0";
                    c++;
                }
                riga++;
            }


VS give me a problem at the first "IF" with error : произошло необработанное исключение типа 'System.NullReferenceException'.
Я думаю, что неправильные строки-это первые 3
заранее спасибо :)

1 Ответов

Рейтинг:
11

Mario Z

Привет, если я правильно вас понял, у вас здесь проблема:

if (ws.Cells["F"+riga.ToString()].Value.ToString() != "")

Ну, первое, что приходит мне в голову, это то, что эта клетка ... null, поэтому попробуйте следующее:
ExcelCell cell = ws.Cells["F" + riga.ToString()];
if (cell != null && cell.Value.ToString() != "")
{
    // ...

Теперь добавим несколько указателей к вашему коду:

1. Вам не нужно инициализировать new ExcelFile например, если вы загружаете существующий файл excel. Так что вместо этого:
var ef = new ExcelFile();
ef = ExcelFile.Load(File_Lettura);

Просто используй это:
var ef = ExcelFile.Load(File_Lettura);


2. Вы можете получить доступ к каждому столбцу, строке и ячейке с именем, предоставив string или с индексом, предоставив int.
Другими словами, например, вместо этого:
int riga = 13;
ws.Cells["B" + riga.ToString()]

Вы можете использовать это:
// Notice I reduced "riga" value by 1 because all indexes start with 0, while the row's names start with "1".
int riga = 12; 
ws.Columns["B"].Cells[riga];

3. Почему вы используете while петля?
Гораздо проще и интуитивно понятно перебирать нужную группу ячеек.
Например вместо этого:
while (ws.Cells["B"+riga.ToString()].Value != null)

Используйте что-то вроде этого:
foreach (ExcelCell cell in ws.Cells.GetSubrange("B13", "B" + ws.Rows.Count))
{
    if (cell == null || string.IsNullOrEmpty(cell.Value.ToString()))
        continue;

    // Do the rest ...
}


4. Последнее, что dgwFile, это элемент управления DataGridView Windows Form?
В случае если это так проверьте этот образец.
Он показывает, как использовать DataGridViewConverter.ExportToDataGridView и DataGridViewConverter.ImportFromDataGridView методы.


Member 11822400

спасибо :) я использую while, потому что я никогда не использовал foreach в школе

Mario Z

Нет проблем, я рад вам помочь.
Кроме того, если вам нужна какая-либо дополнительная помощь с GemBox.Spreadsheet, не стесняйтесь размещать свои вопросы здесь, на CodeProject.