C# 如何在C中安全地从视图类型插入excel工作表#
我打算将视图中的一些数据插入excel工作表,但带有十进制值的列并没有插入数字类型,而是作为文本插入。如何解决此问题?C# 如何在C中安全地从视图类型插入excel工作表#,c#,excel,oledb,C#,Excel,Oledb,我打算将视图中的一些数据插入excel工作表,但带有十进制值的列并没有插入数字类型,而是作为文本插入。如何解决此问题? 使用(OleDbConnection cn=新的OleDbConnection(connectionString)) { cn.Open(); 对于(int i=0;i
使用(OleDbConnection cn=新的OleDbConnection(connectionString))
{
cn.Open();
对于(int i=0;i
在将值插入Excel之前,代码itsels正在将值转换为本地化字符串。这肯定会导致转换问题。如果在任何欧洲国家/地区运行此代码,24.5将变为24,5
不要将值转换为字符串。如果它们作为对象返回,请首先将它们转换为正确的类型。您也不需要在每次迭代中重建command对象。只需创建一次,传递正确的OLEDB类型并更改每行的参数,例如:
var query="INSERT INTO [Data$] " +
"([Title],[Name],[DayOfWeek],[Approval State],[Date],[User ID],[Week],[Project Code],[Project Regular Hours],[Project Overtime Hours],[Sick],[Vacation],[Holiday],[Unpaid Leave],[Other],[Timesheet URL])" +
"VALUES(@Title,@Name,@DayOfWeek,@ApprovalState,@Date,@UserID,@Week,@ProjectCode,@ProjectRegularHours,@ProjectOvertimeHours,@Sick,@Vacation,@Holiday,@UnpaidLeave,@Other,@TimesheetURL)";
var cmd1 = new OleDbCommand(query, cn);
cmd1.Parameters.Add("@Title",OleDbType.VarWChar,20 );
cmd1.Parameters.Add("@Name",OleDbType.VarWChar,20 );
cmd1.Parameters.Add("@DayOfWeek",OleDbType.VarWChar,20 );
...
cmd1.Parameters.Add("@ProjectRegularHours",OleDbType.Decimal,19,4);
for (int i = 0; i < Grid.RowCount; i++)
{
cmd1.Parameters["@Title"].Value = Grid.GetRowCellValue(i,"Title");
...
cmd1.Parameters["@ProjectRegularHours"].Value = (decimal)Grid.GetRowCellValue(i,"ProjectRegularHours"))
cmd1.ExecuteNonQuery();
}
或
还可以将结果范围转换为命名表:
using (var xlPackage = new ExcelPackage(new FileInfo(somePath))
{
// add a sheet
var ws = xlPackage.Workbook.Worksheets.Add("Sheet1");
var table = ws.Tables.Add(range, "table1");
table.ShowTotal = true;
table.TableStyle = TableStyles.Light2;
...
}
代码itsels在将值插入Excel之前将其转换为本地化字符串。这肯定会导致转换问题。如果在任何欧洲国家/地区运行此代码,24.5将变为
24,5
不要将值转换为字符串。如果它们作为对象返回,请首先将它们转换为正确的类型。您也不需要在每次迭代中重建command对象。只需创建一次,传递正确的OLEDB类型并更改每行的参数,例如:
var query="INSERT INTO [Data$] " +
"([Title],[Name],[DayOfWeek],[Approval State],[Date],[User ID],[Week],[Project Code],[Project Regular Hours],[Project Overtime Hours],[Sick],[Vacation],[Holiday],[Unpaid Leave],[Other],[Timesheet URL])" +
"VALUES(@Title,@Name,@DayOfWeek,@ApprovalState,@Date,@UserID,@Week,@ProjectCode,@ProjectRegularHours,@ProjectOvertimeHours,@Sick,@Vacation,@Holiday,@UnpaidLeave,@Other,@TimesheetURL)";
var cmd1 = new OleDbCommand(query, cn);
cmd1.Parameters.Add("@Title",OleDbType.VarWChar,20 );
cmd1.Parameters.Add("@Name",OleDbType.VarWChar,20 );
cmd1.Parameters.Add("@DayOfWeek",OleDbType.VarWChar,20 );
...
cmd1.Parameters.Add("@ProjectRegularHours",OleDbType.Decimal,19,4);
for (int i = 0; i < Grid.RowCount; i++)
{
cmd1.Parameters["@Title"].Value = Grid.GetRowCellValue(i,"Title");
...
cmd1.Parameters["@ProjectRegularHours"].Value = (decimal)Grid.GetRowCellValue(i,"ProjectRegularHours"))
cmd1.ExecuteNonQuery();
}
或
还可以将结果范围转换为命名表:
using (var xlPackage = new ExcelPackage(new FileInfo(somePath))
{
// add a sheet
var ws = xlPackage.Workbook.Worksheets.Add("Sheet1");
var table = ws.Tables.Add(range, "table1");
table.ShowTotal = true;
table.TableStyle = TableStyles.Light2;
...
}
如何插入它们?添加您的代码。你说“安全地插入”是什么意思?如果你不发布代码,就不可能帮助解决代码中的问题。Excel可以毫无问题地处理小数。你确定要插入小数而不是本地化字符串吗?请在问题中发布代码,而不是代码的屏幕截图。屏幕截图无法编译。顺便说一句
ToString()
。代码本身正在将小数转换为本地化字符串,而不是将其存储在Excel中。别那么做。如果需要尝试但代码太大,请将值转换为十进制,如何插入它们?添加您的代码。你说“安全地插入”是什么意思?如果你不发布代码,就不可能帮助解决代码中的问题。Excel可以毫无问题地处理小数。你确定要插入小数而不是本地化字符串吗?请在问题中发布代码,而不是代码的屏幕截图。屏幕截图无法编译。顺便说一句ToString()
。代码本身正在将小数转换为本地化字符串,而不是将其存储在Excel中。别那么做。如果需要,请将值强制转换为十进制。我尝试了,但代码太大。谢谢大家的重播。但是,这些代码不适用于我,而是每个人都适用于你的重播。但是这些代码不适用于我
using (var xlPackage = new ExcelPackage(new FileInfo(somePath))
{
// add a sheet
var ws = xlPackage.Workbook.Worksheets.Add("Sheet1");
var table = ws.Tables.Add(range, "table1");
table.ShowTotal = true;
table.TableStyle = TableStyles.Light2;
...
}