C# 将excel中的datatable列作为字符串填充
我正在填写excel表格中的数据表,表格格式为(小数、日期等) 我的问题是,列的格式是excel工作表,但我需要将所有列填充为字符串,如何才能做到这一点 我的导入方法: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",
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。