简体   繁体   中英

vb.net writer to excel function working on one pc but not on another

I have a vb.net function which uses oledb to create a spreadsheet, then treat it like a database, creating tables and inserting values. The function takes in a filename and a dataset, and returns the filename if it worked. The function works beautifully on my dev machine, but not other PCs. Below is my function, is there anything wrong with the code? Any suggestions?

EDIT: There are no errors being thrown, the resulting file doesn't contain any data.

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  

....

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

Check your system's Regional Settings vs other machines' Regional Settings. If they differ, try to match them.

Also, when working with Office Automation you should force the thread's culture to en-US. Set this just before calling writeToExcelFile() (C# syntax):

System.Threading.Thread.CurrentThread.CultureInfo = new System.Globalization.CultureInfo("en-US");

After calling the method, restore the culture (if needed).

Problem is not with this code. Problem is with the dataset that's being passed in.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM