【发布时间】:2019-03-27 20:36:06
【问题描述】:
使用oledb向excel表格中插入数据,整数只显示为整数:
我已经尝试更改以下连接字符串的属性:
string szConnectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + myFilePath + "';Extended Properties=\"Excel 12.0;HDR=YES;Readonly=False;\"";
此外,我尝试创建一个具有数据类型的新工作表/表格:
cmd.CommandText = "CREATE TABLE [data3] (quarter VARCHAR, value INT);";
按照我当前的代码插入数据:
cmd.CommandText = "CREATE TABLE [data3] (quarter VARCHAR, value INT);";
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO [data3$]([quarter ],[value]) VALUES(?,?)";
cmd.Parameters.AddWithValue("@p1", "2018.06");
cmd.Parameters.AddWithValue("@p2", 13); // <-- INT
cmd.ExecuteNonQuery();
我的期望是数据正确插入到excel中,意思是正确的格式。
【问题讨论】:
-
离题,但你为什么无缘无故地使用插值字符串?你可以把你的代码写成
$"Provider=...;Data Source='{myFilePath}';..." -
一般来说,OLEDB 与 Excel 的交互不支持 格式化 值。如果您想完全控制结果,请使用 .NET Excel 库。你可以找到一个列表here。 (就我个人而言,我使用 SpreadsheetLight。)
-
是的,你是对的,我将代码 sn-p 更改为“int”。将数据插入excel并打开excel文件,所有数据都显示为字符串而不是整数。在屏幕截图中,您可以看到每列的绿色边缘表示“此字符串可能是整数”
-
@SNO 避免
AddWithValues。该方法必须根据输入猜测要使用的类型、大小、比例等。请改用Add并指定您想要的类型。 -
@SNO 更好的选择是使用像 EPPlus 这样的库来直接创建
xlsx文件。您不必安装 Jet 驱动程序,您可以操作样式、表格等。将数据加载到工作表中可以像sheet.Cells.LoadFromDataTable(someTable)或sheet.Cells.LoadFromCollection(someList)一样简单