Добавить новый лист в книгу Excel для хранения данных, когда предел строки> 1M - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь сохранить некоторые данные в файл Excel с помощью Spire.Xls.

При копировании данных из нескольких файлов на первый лист другого файла Excel, я хочу создать новый лист Excel при достижении строки = 1 048 575 и вставить данные в этот новый лист. Вот мой код:

        Workbook tempbook = new Workbook();
        tempbook.LoadFromFile(PathToSecondFile);

        Workbook workbook = new Workbook();
        workbook.LoadFromFile(PathToFirstFile);

        //import the second workbook's worksheet into the first workbook using a datatable
        Worksheet sheet2 = tempbook.Worksheets[0];
        //copy data from sheet2 into a datatable
        DataTable dataTable = sheet2.ExportDataTable();
        //load sheet1
        Worksheet sheet1 = workbook.Worksheets[0];

        var c1 = sheet1.LastRow;
        var c2 = sheet2.LastRow;

        if (c1 >= 1048575 || c2 >= 1048575 || (c1 + c2) >= 1048575)
        {
             //create a new worksheet and append data into it but
             //at this line getting Index out of bound exception   
             Worksheet sheet3 = workbook.Worksheets.Add("NewSheet");
             sheet3.InsertDataTable(dataTable, false, sheet3.LastRow + 1, 1);
        }
        else
        {
             sheet1.InsertDataTable(dataTable, false, sheet1.LastRow + 1, 1);
        }
  }

Даже если код превосходит исключение, данные сохраняются в sheet2, но данные в sheet1 не сохраняются. Все предложения приветствуются. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Это было довольно просто на самом деле ... Небольшой обходной путь сделал задачу. Итак, вот код:

int c1 = workbook.ActiveSheet.LastRow, c2 = tempbook.Worksheets[0].LastRow;

if ((c1 + c2) <= 1048575)
{
    //import the second workbook's worksheet into the first workbook using a datatable
    //load 1st sheet of tempbook into sheet
    Worksheet sheet = tempbook.Worksheets[0];
    //copy data from sheet into a datatable
    DataTable dataTable = sheet.ExportDataTable();
    //load sheet1
    Worksheet sheet1 = workbook.Worksheets[workbook.ActiveSheetIndex];
    sheet1.InsertDataTable(dataTable, false, sheet1.LastRow + 1, 1);
}
else if ((c1 >= 1048575 && c2 >= 1048575) || c1 >= 1048575 || c2 >= 1048575 || (c1 + c2) >= 1048575)
{
    workbook.Worksheets.AddCopy(tempbook.Worksheets[0]);
    indx = workbook.ActiveSheet.Index;
    workbook.ActiveSheetIndex = ++indx;
}
else
{
    //import the second workbook's worksheet into the first workbook using a datatable
    //load 1st sheet of tempbook into sheet
    Worksheet sheet = tempbook.Worksheets[0];
    //copy data from sheet into a datatable
    DataTable dataTable = sheet.ExportDataTable();
    //load sheet1
    Worksheet sheet1 = workbook.Worksheets[workbook.ActiveSheetIndex];
    sheet1.InsertDataTable(dataTable, false, sheet1.LastRow + 1, 1);
}

Очевидно, что код блока if и else одинаков. Но не мог думать ни о чем другом. Любые модификации приветствуются.

0 голосов
/ 28 августа 2018

Возможно ли переключиться на формат Excel 2007+? Таким образом, вы можете найти множество провайдеров для Excel, например, Apache npoi, Spreadsheet Light.

...