使用 GemBox 将数据从 DataGridView 导入现有 Excel 文件

Importing data from DataGridView to existing Excel file using GemBox

我对编程和 GemBox 还很陌生。我发现这段代码将数据从 DataGridView 插入到现有的 Excel sheet 中,带有页眉和页脚。代码会发生什么,它完全替换了现有的 excel 文件并删除了所有页眉和页脚。我想要做的只是插入从单元格 A:9 开始的数据,而不从其他 excel 单元格中删除预先存在的数据。有没有办法使用 GemBox 来做到这一点?

private void replace_Click(object sender, EventArgs e)
        {
            var saveFileDialog = new SaveFileDialog();
            saveFileDialog.Filter = "XLSX files (*.xlsx)|*.xlsx";
            saveFileDialog.FilterIndex = 3;

            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                var workbook = new ExcelFile();
                var worksheet = workbook.Worksheets.Add("Sheet1");

                var options = new ImportFromDataGridViewOptions();
                options.ColumnHeaders = false;
                options.StartRow = 8;       
                options.StartColumn = 0;

                DataGridViewConverter.ImportFromDataGridView(worksheet, this.dataGridView1, options);

                workbook.Save(saveFileDialog.FileName);
            }
        }

如有任何帮助,我们将不胜感激。

使用这个将数据从 DataGridView 导入现有的 Excel sheet:

private void replace_Click(object sender, EventArgs e)
{
    var saveFileDialog = new SaveFileDialog();
    saveFileDialog.Filter = "XLSX files (*.xlsx)|*.xlsx";

    if (saveFileDialog.ShowDialog() == DialogResult.OK)
    {
        var workbook = ExcelFile.Load("Path to your existing Excel file.");
        var worksheet = workbook.Worksheets.ActiveWorksheet;
        var options = new ImportFromDataGridViewOptions("A9");

        DataGridViewConverter.ImportFromDataGridView(worksheet, this.dataGridView1, options);
        workbook.Save(saveFileDialog.FileName);
    }
}

注意,这将从单元格 A9 开始导入数据,并替换导入完成范围内的任何现有数据。

换句话说,如果您的 Excel 文件在单元格 A9、B9 等中已有一些数据。它们最终将被覆盖。

如果您不想这样,则插入空行以为 DataGridView 数据腾出空间,如下所示:

worksheet.Rows.InsertEmpty(8, this.dataGridView1.Rows.Count);

var options = new ImportFromDataGridViewOptions("A9");
DataGridViewConverter.ImportFromDataGridView(worksheet, this.dataGridView1, options);