C# 更新Excel 2010,但不更改行
我想用以下代码使用OLEDB更新Excel 2010文件 我发现当我调试这段代码时,没有例外,但是excel文件列(状态)的内容没有更新,有人能帮我吗 另外,sql语句如下所示:C# 更新Excel 2010,但不更改行,c#,sql,sql-update,oledb,excel-2010,C#,Sql,Sql Update,Oledb,Excel 2010,我想用以下代码使用OLEDB更新Excel 2010文件 我发现当我调试这段代码时,没有例外,但是excel文件列(状态)的内容没有更新,有人能帮我吗 另外,sql语句如下所示: 更新[Sheet1$]设置Status='Imported',其中Status位于(从[Sheet1$]中选择前5位状态) 知道要找到解决这些神秘问题的方法有多困难,我建议您发布excel文件的摘录。此外,我需要知道GetExcelConnectionStringByWrite(文件路径)中发生了什么 由于这些项目不存
更新[Sheet1$]设置Status='Imported',其中Status位于(从[Sheet1$]中选择前5位状态)
知道要找到解决这些神秘问题的方法有多困难,我建议您发布excel文件的摘录。此外,我需要知道GetExcelConnectionStringByWrite(文件路径)中发生了什么 由于这些项目不存在,我只能给出两个常见的原因:
- 连接字符串中的HDR部分未设置为“是”,并且您的提供商不知道任何标头名称
- 提供者将检查前八行中的列数据类型->您的工作表是否在这八行中提供了足够的数据值
Jan我使用了完全相同的代码,但做了如下细微的修改,并按要求运行 之前:
COLUMN A has fieldname called Status
A1 Status
A2 A
A3 B
A4 C
A5 D
A6 E
A7 F
代码:
之后:
COLUMN A has fieldname called Status
A1 Status
A2 Imported
A3 Imported
A4 Imported
A5 Imported
A6 Imported
A7 F
你好,Jan,函数GetExcelConnectionStringByWrite(文件路径)将返回一个字符串:Provider=Microsoft.ACE.OLEDB.12.0;数据源=D:\\\\Michael\\\\Project1\\\\Test.xlsx;扩展属性=\“Excel 12.0;HDR=YES;IMEX=0;MAXSCANROWS=10;READONLY=FALSE\”,Test.xlsx有标题和1000多行。我已经测试了sql“UPDATE[Sheet1$]SET Status='Imported'”的工作原理。Excel的OLEDB似乎不支持“UPDATE[Sheet1$]SET Status='Imported'(从[Sheet1$]中选择前5个状态)”SQL语句。似乎Excel不是Oracle:-)谢谢zfus,我想可能我的OLEDB驱动程序不正确,我的操作系统是Win7 64位,Office 2010是32位。所以OLEDB驱动程序是32位!我在64位Win7+32位office上成功运行了上述代码。当您使用一个新的简单XLSX文件尝试上述代码时会发生什么情况?@Michael我已将a解决方案上载到。继续下载并点击Raw。解压缩、打开项目并运行应用程序。Test.xlsx位于bin/debug和bin/release目录中。检查项目是否运行良好。嗨,zfus,谢谢你的分享。你的代码没有引发与我之前编写的相同的异常,不幸的是,test.xlsx文件无法在我的笔记本电脑上更新为“导入”。我不知道为什么。嗨@Michael,你正在打开StackOverflow18627032/bin/Debug目录下的test.xlsx吗?如果是,请在Excel中打开它,并更改单元格中的某些信息,保存它,然后重试。我很好奇为什么更新不能在你的电脑上运行。
using System;
using System.Data.OleDb;
namespace StackoverflowExcel
{
class Program
{
static void Main()
{
using(var myConnection = new OleDbConnection(GetExcelConnectionStringByWrite()))
using (var myCommand = new OleDbCommand())
{
myConnection.Open();
myCommand.Connection = myConnection;
myCommand.CommandText =
"UPDATE [Sheet1$] SET Status ='Imported' WHERE Status IN ( SELECT TOP 5 Status FROM [Sheet1$] )";
myCommand.ExecuteNonQuery();
myConnection.Close();
}
Console.WriteLine("Done");
Console.ReadKey();
}
private static string GetExcelConnectionStringByWrite()
{
return
@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\users\cys\desktop\Test.xlsx;Extended Properties='Excel 12.0;HDR=YES;IMEX=0;MAXSCANROWS=10;READONLY=FALSE'";
}
}
}
COLUMN A has fieldname called Status
A1 Status
A2 Imported
A3 Imported
A4 Imported
A5 Imported
A6 Imported
A7 F