VB.Net无Office依赖修改Excel表头文本的问题及解决方法
最终解决方案
- 优先推荐使用 EPPlus NuGet包 实现需求,代码简单直观、使用门槛极低,无需依赖Office环境
- 若坚持使用OLEDB/ADODB方案,原报错的根源是连接字符串的Extended Properties部分填写了错误的Excel版本,该修正方案由TnTinMn在评论中提供
问题背景
我在Visual Studio 2017环境中使用VB.Net开发,需要批量修改多个Excel文件的表头文本。由于代码要运行在未安装MS Office的公用服务器上,且运行所用的服务账号无法与桌面应用交互,因此不能使用Excel/Office项目引用,最初仅考虑采用OLEDB/ADODB方案。
初始问题与代码
最开始我使用以下代码尝试修改指定单元格内容,但是第一条UPDATE语句可以正常执行,执行第二条时会抛出「未给一个或多个必需参数提供值」错误:
' 创建连接字符串 strConnect = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & arrFilePath(i) & "; Extended Properties='Excel 8.0;HDR=No'" ' 构造SQL语句 strSQL1 = "UPDATE [Sheet1$A1:A1] SET F1='Disbursement Status';" strSQL2 = "UPDATE [Sheet1$B1:B1] SET F2='Check/ACH Number';" ' 创建并打开连接对象 objConn = New ADODB.Connection objConn.Open(strConnect) ' 执行更新语句 objConn.Execute(strSQL1) objConn.Execute(strSQL2) ' 关闭连接 objConn.Close()
我需要修改的是Sheet1中B1和M1单元格的表头文本,排查很久都没有找到问题原因。
修正后遇到的新问题
解决了参数报错的问题后,又遇到了新的问题:我所用的.xlsx文件都是从SAP导出的,使用修正后的OLEDB代码操作时不会抛出任何错误,但表头文本不会被修改,只有手动在Excel中打开文件、修改表头后保存才能生效,操作非常繁琐。
最终所有问题均已解决。
内容的提问来源于stack exchange,提问作者Bronco638
相关产品推荐
相关产品推荐

