C# 将excel中的datatable列作为字符串填充

C# 将excel中的datatable列作为字符串填充,c#,asp.net,vb.net,excel,datatable,C#,Asp.net,Vb.net,Excel,Datatable,我正在填写excel表格中的数据表,表格格式为(小数、日期等) 我的问题是,列的格式是excel工作表,但我需要将所有列填充为字符串,如何才能做到这一点 我的导入方法: Private Function upload(filename As String) As DataTable Dim FilePath__1 As String = "Uploads/" Try Dim allowdFile As String() = {".xls",

我正在填写excel表格中的数据表,表格格式为(小数、日期等)

我的问题是,列的格式是excel工作表,但我需要将所有列填充为字符串,如何才能做到这一点

我的导入方法:

Private Function upload(filename As String) As DataTable
        Dim FilePath__1 As String = "Uploads/"
        Try
            Dim allowdFile As String() = {".xls", ".xlsx"}
            Dim FileExt As String = ".xls"

            Dim isValidFile As Boolean = allowdFile.Contains(FileExt)
            If Not isValidFile Then
                Return Nothing
            Else
                Dim filePath__2 As String = Server.MapPath(FilePath__1) & filename

                Dim con As OleDbConnection = Nothing
                If FileExt = ".xls" Then
                    con = New OleDbConnection((Convert.ToString("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=") & filePath__2) + ";Extended Properties=Excel 8.0;")
                ElseIf FileExt = ".xlsx" Then
                    con = New OleDbConnection((Convert.ToString("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=") & filePath__2) + ";Extended Properties=Excel 12.0;")
                End If
                con.Open()

                Dim dt As DataTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)

                Dim getExcelSheetName As String = dt.Rows(0)("Table_Name").ToString()

                Dim ExcelCommand As New OleDbCommand((Convert.ToString("SELECT * FROM [") & getExcelSheetName) + "]", con)
                Dim ExcelAdapter As New OleDbDataAdapter(ExcelCommand)
                Dim ExcelDataSet As New DataSet()
                ExcelAdapter.Fill(ExcelDataSet)
                con.Close()
                If ExcelDataSet.Tables.Count > 0 Then
                    Return ExcelDataSet.Tables(0)
                Else
                    Return Nothing
                End If
            End If
        Catch ex As Exception
            Return Nothing
        End Try
    End Function

任何帮助都会很好。

一个简单的方法是循环行并使用
ToString

DataTable tblOld = ExcelDataSet.Tables[0];
DataTable tblNew = new DataTable();
foreach (DataColumn col in tblOld.Columns)
    tblNew.Columns.Add(col.ColumnName);
foreach (DataRow rowOld in tblOld.Rows)
{
    DataRow rowNew = tblNew.Rows.Add();
    foreach (DataColumn col in tblOld.Columns)
    {
        rowNew.SetField(col.ColumnName, rowOld.IsNull(col) ? "" : rowOld[col].ToString());
    }
} 
return tblNew;

请尝试在excel连接字符串中使用IMEX=1,如下所示

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=YourExcelFilePath.xls;Extended Properties=""Excel 12.0;HDR=YES;IMEX=1"""

此属性提示读者以文本形式读取所有值

为什么你在讽刺??不起作用我的意思是专栏仍然是双重的,日期等等。@AliIssa:我不想讽刺,但如果每个人都用“它不起作用”(不仅仅是你)来描述问题,就很难找到问题的原因。您是否使用了调试器来查看发生了什么?也许你正在接受一个例外,在某个地方有一个空的捕获。我的代码应该可以工作,没有魔法,它只是使用
ToString
将每个单元格值转换为
String
。你如何检查它是否有效?@AliIssa:我已经编辑了我的代码。第一种方法使用旧的DataColumns,您需要一个新的DataTbale,因为所有列都应该是string。