VB如何通过StringBuilder将数据库查询结果写入.xlsx文件指定单元格区域
解决方案
问题根因
原代码将分号拼接的多行文本直接赋值给单个单元格oSheet.Range("A1"),Excel不会自动将分隔符拆分到对应行列,因此所有内容都会堆积在第一个单元格。
实现方案
无需使用StringBuilder拼接内容,直接将DataTable的表头和数据批量写入对应Excel范围即可,该方案性能远高于逐单元格赋值。
替换原代码中StringBuilder相关逻辑为以下内容
Dim DttDatiEsporta2 As DataTable = G7Dettagli.Tables(0) Dim rowCount As Integer = DttDatiEsporta2.Rows.Count Dim colCount As Integer = DttDatiEsporta2.Columns.Count ' 写入表头 For col = 0 To colCount - 1 oSheet.Cells(1, col + 1).Value = DttDatiEsporta2.Columns(col).ColumnName Next ' 构造数据二维数组,批量写入避免逐单元格操作的性能损耗 Dim dataArr(rowCount - 1, colCount - 1) As Object For row = 0 To rowCount - 1 For col = 0 To colCount - 1 dataArr(row, col) = DttDatiEsporta2.Rows(row)(col) Next Next ' 批量写入数据(从A2开始) oSheet.Range(oSheet.Cells(2, 1), oSheet.Cells(rowCount + 1, colCount)).Value = dataArr ' 可选:自动调整所有列宽适配内容 oSheet.UsedRange.EntireColumn.AutoFit()
额外优化建议
在异常捕获的Finally块中统一释放Excel COM对象,避免程序报错时Excel进程残留在系统后台:
Finally If Not oSheet Is Nothing Then Marshal.ReleaseComObject(oSheet) If Not oBook Is Nothing Then oBook.Close() Marshal.ReleaseComObject(oBook) End If If Not oExcel Is Nothing Then oExcel.Quit() Marshal.ReleaseComObject(oExcel) End If End Try
内容的提问来源于stack exchange,提问作者Simone
相关产品推荐
相关产品推荐

