如何用GemBox将DataGridView数据导入现有Excel且不覆盖原有内容
GemBox导入DataGridView到现有Excel指定位置不覆盖原有内容的解决方案
你当前代码的核心问题是每次执行都创建了全新的空白Excel工作簿对象,保存时自然会覆盖目标路径的原有文件,丢失所有原有格式和内容。按以下方式修改代码即可实现从A9单元格插入数据、保留原有页眉页脚和其他单元格内容的需求:
修改后的代码
private void replace_Click(object sender, EventArgs e) { // 第一步:选择带页眉页脚的现有Excel模板文件 var openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "XLSX files (*.xlsx)|*.xlsx"; if (openFileDialog.ShowDialog() != DialogResult.OK) return; // 加载现有工作簿,而非新建空白工作簿 var workbook = ExcelFile.Load(openFileDialog.FileName); // 获取现有工作表,不要新增工作表 var worksheet = workbook.Worksheets["Sheet1"]; var options = new ImportFromDataGridViewOptions(); options.ColumnHeaders = false; options.StartRow = 8; // 0索引,对应Excel第9行,即A9起始位置,无需修改 options.StartColumn = 0; DataGridViewConverter.ImportFromDataGridView(worksheet, this.dataGridView1, options); // 第二步:选择保存路径,可选择覆盖原文件或另存为新文件 var saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "XLSX files (*.xlsx)|*.xlsx"; saveFileDialog.FilterIndex = 3; if (saveFileDialog.ShowDialog() == DialogResult.OK) { workbook.Save(saveFileDialog.FileName); } }
关键说明
- 导入操作只会覆盖起始位置开始、与DataGridView行列数对应的单元格范围,不会改动工作表其他区域的内容、格式、页眉页脚、公式等元素
- 如果你的目标工作表名称不是
Sheet1,请替换为实际的工作表名称,也可以用索引workbook.Worksheets[0]获取第一个工作表 - 如果不需要保留原模板文件,可跳过保存路径选择步骤,直接调用
workbook.Save(openFileDialog.FileName)覆盖原文件即可
内容的提问来源于stack exchange,提问作者cc_newbie
相关产品推荐
相关产品推荐

