Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中安全地从视图类型插入excel工作表#_C#_Excel_Oledb - Fatal编程技术网

C# 如何在C中安全地从视图类型插入excel工作表#

C# 如何在C中安全地从视图类型插入excel工作表#,c#,excel,oledb,C#,Excel,Oledb,我打算将视图中的一些数据插入excel工作表,但带有十进制值的列并没有插入数字类型,而是作为文本插入。如何解决此问题? 使用(OleDbConnection cn=新的OleDbConnection(connectionString)) { cn.Open(); 对于(int i=0;i

我打算将视图中的一些数据插入excel工作表,但带有十进制值的列并没有插入数字类型,而是作为文本插入。如何解决此问题?

使用(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;
    ...
}