vb.net writer to excel函数在一台电脑上工作,但在另一台电脑上不工作
我有一个vb.net函数,它使用oledb创建电子表格,然后将其视为数据库,创建表格并插入值。该函数接收文件名和数据集,如果有效,则返回文件名。这个函数在我的开发机器上运行得很好,但在其他电脑上却没有。下面是我的函数,代码有什么问题吗?有什么建议吗 编辑:没有抛出错误,生成的文件不包含任何数据vb.net writer to excel函数在一台电脑上工作,但在另一台电脑上不工作,vb.net,winforms,excel,oledb,Vb.net,Winforms,Excel,Oledb,我有一个vb.net函数,它使用oledb创建电子表格,然后将其视为数据库,创建表格并插入值。该函数接收文件名和数据集,如果有效,则返回文件名。这个函数在我的开发机器上运行得很好,但在其他电脑上却没有。下面是我的函数,代码有什么问题吗?有什么建议吗 编辑:没有抛出错误,生成的文件不包含任何数据 Imports System Imports System.Configuration Imports System.Data Imports System.Data.OleDb Imports Syst
Imports System
Imports System.Configuration
Imports System.Data
Imports System.Data.OleDb
Imports System.Data.SqlClient
Imports System.Drawing
Imports System.IO
Imports System.Net.Mail
Imports System.Text
Imports System.Web
Imports Microsoft.Office.Interop
公共共享函数writeToExcelFile(ByVal模板作为字符串,ByVal文件名作为字符串,ByVal数据作为数据集)作为字符串
如果File.Exists(filename)存在,则
File.Delete(文件名)
如果结束
如果模板字符串.Empty和文件名字符串.Empty,则
File.Copy(模板、文件名)
如果结束
Dim connString As String=“Provider=Microsoft.Jet.OLEDB.4.0;数据源=“+filename+”“扩展属性=”“Excel 8.0;HDR=Yes;”
Dim conn作为新的OLEDB连接(connString)
尝试
康涅狄格州公开赛
Dim cmd作为新的OleDbCommand()
将每个表作为data.Tables中的DataTable
Dim tableName As String=table.tableName.Replace(“,”)
Dim tableCreate As String=“创建表[”+tableName+”](“
Dim sql As String=“插入[”+tableName+“$”()
Dim colName As String=String.Empty
对于表中的每个列作为DataColumn
colName=col.ColumnName.Replace(“#”和“num”)
如果colName.Contains(“”),则
sql++=“[”+colName.Replace(“,”)+“,”
其他的
sql+=“”+colName.Replace(“”,“”)+“”,“”
如果结束
tableCreate+=“[”+colName+“]varchar(255),”
下一个
如果tableCreate.EndsWith(“,”),则
tableCreate=tableCreate.TrimEnd(新的[Char](){,“c})
如果结束
tableCreate+=“””
cmd=新的OleDbCommand(表格创建,conn)
cmd.ExecuteNonQuery()
如果sql.EndsWith(“,”),则
sql=sql.TrimEnd(新的[Char](){,“c})
如果结束
sql+=“””
对于表中的每一行作为DataRow
将值设置为String=“values(”
对于表中的每个列作为DataColumn
尝试
值+=“'”+cleanString(行(列).ToString())。子字符串(0250)+“…”,”
捕获e作为例外
值+=“'”+cleanString(行(列).ToString())+“,”
结束尝试
下一个
如果值为.EndsWith(“,”),则
values=values.TrimEnd(新的[Char](){,“c})
如果结束
值+=“””
cmd=新的OleDbCommand(sql+值,conn)
cmd.ExecuteNonQuery()
下一个
下一个
康涅狄格州关闭
返回文件名
捕获e作为例外
抛出新异常(例如消息)
返回字符串。空
结束尝试
端函数
检查系统的区域设置与其他机器的区域设置。
如果它们不同,则尝试匹配它们
此外,在使用办公自动化时,您应该强制执行线程文化。
在调用writeToExcelFile()之前设置此选项(C#语法):
调用该方法后,恢复区域性(如果需要)。问题不在于此代码。问题在于传入的数据集 抛出任何错误?(1)在catch块中,要么返回,要么抛出,不能同时执行这两个操作。(2) 其他用途是否具有相同版本的excel?(3) 他们是否具有读取和写入文件和模板的正确权限,旧文件是否被删除?(4) 你能添加更多的日志记录来了解目标系统上到底发生了什么吗?1)好的,我来看看我是否能在没有返回的情况下获得更多信息。2) 不,他们有2003年,我有2007年,但我正在创建一个.xls。3) 通常不传入任何内容作为模板,即创建目标文件。4) 是的,我可以,我应该在哪里添加语句?我实际上没有使用Excel automation,该导入是早期版本的遗留。无论如何,您可以检查区域设置吗?您指的是什么区域设置?电脑时钟的时区?不,是Windows 7控制面板中名为Region and Language的时区所有区域和语言设置在两台机器上看起来都一样。(都是XP)
Public Shared Function writeToExcelFile(ByVal template As String, ByVal filename As String, ByVal data As DataSet) As String
If File.Exists(filename) Then
File.Delete(filename)
End If
If template <> String.Empty AndAlso filename <> String.Empty Then
File.Copy(template, filename)
End If
Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties=""Excel 8.0;HDR=Yes;"""
Dim conn As New OleDbConnection(connString)
Try
conn.Open()
Dim cmd As New OleDbCommand()
For Each table As DataTable In data.Tables
Dim tableName As String = table.TableName.Replace(" ", "")
Dim tableCreate As String = "CREATE TABLE [" + tableName + "] ("
Dim sql As String = "INSERT INTO [" + tableName + "$]("
Dim colName As String = String.Empty
For Each col As DataColumn In table.Columns
colName = col.ColumnName.Replace("#", "num")
If colName.Contains(" ") Then
sql += " [" + colName.Replace("'", "") + "],"
Else
sql += " " + colName.Replace("'", "") + ","
End If
tableCreate += " [" + colName + "] varchar(255),"
Next
If tableCreate.EndsWith(",") Then
tableCreate = tableCreate.TrimEnd(New [Char]() {","c})
End If
tableCreate += ") "
cmd = New OleDbCommand(tableCreate, conn)
cmd.ExecuteNonQuery()
If sql.EndsWith(",") Then
sql = sql.TrimEnd(New [Char]() {","c})
End If
sql += ") "
For Each row As DataRow In table.Rows
Dim values As String = " VALUES("
For Each col As DataColumn In table.Columns
Try
values += "'" + cleanString(row(col).ToString()).Substring(0, 250) + "...',"
Catch e As Exception
values += "'" + cleanString(row(col).ToString()) + "',"
End Try
Next
If values.EndsWith(",") Then
values = values.TrimEnd(New [Char]() {","c})
End If
values += ") "
cmd = New OleDbCommand(sql + values, conn)
cmd.ExecuteNonQuery()
Next
Next
conn.Close()
Return filename
Catch e As Exception
Throw New Exception(e.Message)
Return String.Empty
End Try
End Function
System.Threading.Thread.CurrentThread.CultureInfo = new System.Globalization.CultureInfo("en-US");