使用Office Interop导出DataGridView到Word表格时数据错位求助


问题原因
- Office Interop 中 Word 表格的行、列索引是从1开始计数的,你当前代码使用从0开始的索引直接赋值,会出现单元格定位偏移,甚至触发索引越界错误。
- 若你的DataGridView开启了「允许用户添加行」属性,
dataGridViewObjednavka.RowCount会包含底部的空白待输入行,创建表格时会多生成空白行,也会导致内容匹配错位。
修正后代码
// 先排除DataGridView的空白新增行,计算实际有效行数 int validRowCount = dataGridViewObjednavka.AllowUserToAddRows ? dataGridViewObjednavka.RowCount - 1 : dataGridViewObjednavka.RowCount; // 创建表格时使用有效行数 Table thirdTable = document.Tables.Add(para3.Range, validRowCount, dataGridViewObjednavka.ColumnCount, ref missing, ref missing); // 开启表格自动调整内容适配,避免内容挤压错位 thirdTable.AutoFitBehavior(WdAutoFitBehavior.wdAutoFitContent); for (int i = 0; i < validRowCount; i++) { for (int j = 0; j < dataGridViewObjednavka.Columns.Count; j++) { // Word表格单元格索引从1开始,所以行号、列号都要+1 thirdTable.Cell(i + 1, j + 1).Range.Text = Convert.ToString(dataGridViewObjednavka.Rows[i].Cells[j].Value); } }
额外优化建议
- 赋值前先判断
dataGridViewObjednavka.Rows[i].Cells[j].Value是否为null,避免直接输出null字符串到表格中 - 如果导出后仍然存在对齐偏差,可以给单元格的ParagraphFormat设置对齐属性,统一内容对齐样式
内容的提问来源于stack exchange,提问作者Matis_RnK
相关产品推荐
相关产品推荐

