【发布时间】:2014-05-30 13:51:30
【问题描述】:
我没有很多使用 C# 处理 Excel 的经验。我不得不用谷歌搜索很多技术,但运气不错。导致我在这里的原因是我在尝试升级公司网络上的 Excel 文件时遇到的问题。我在本地驱动器上升级 Excel 文件没有任何问题,但是当它被定向到网络上的文件时,它失败并显示“Microsoft Jet 数据库引擎找不到对象 '\\nas1\eng\legacy\XView_Results \Book1-xview-test.xlsx'。确保对象存在,并且正确拼写它的名称和路径名。"
我尝试将路径字符串更改为具有四个斜杠和两个斜杠。 “\\nas1\eng\legacy\XView_Results\Book1-xview-test.xlsx” 但它失败了,解释为: \\nas1\eng\legacy\XView_Results\Book1-xview-test.xlsx (注意:stackoverflow 不会显示我的四个和两个斜杠)
我尝试将 C# 技术与 @ 结合使用 字符串文件名 = @"\nas1\eng\legacy\XView_Results\Book1-xview-test.xlsx"; 并将命令更改为: MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';" ); 但是得到这个错误: '\nas1\eng\legacy\XView_Results\Book1-xview-test.xlsx' 不是有效路径。确保路径名拼写正确,并且您已连接到文件所在的服务器。
任何想法都将不胜感激。
这是失败的例程的代码:
private void buttonSendToExcel_Click(object sender, EventArgs e)
{
//try
//{
string FileName = @"\\nas1\eng\legacy\XView_Results\Book1-xview-test.xlsx";
System.Data.OleDb.OleDbConnection MyConnection;
System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
string sql = null;
string sql2 = null;
string sql3 = null;
//MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='\\\\nas1\\eng\\legacy\\XView_Results\\Book1-xview-test.xlsx';Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';");
//MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\Book1-xview-test.xlsx';Extended Properties='Excel 8.0;HDR=YES;';");
//MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='\\\nas1\\eng\\legacy\\XView_Results\\Book1-xview-test.xlsx';Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';");
MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';");
MyConnection.Open();
myCommand.Connection = MyConnection;
sql = "Update [Sheet1$] set result=" + od + " where id=1";
myCommand.CommandText = sql;
myCommand.ExecuteNonQuery();
sql2 = "Update [Sheet1$] set result=" + id + " where id=2";
myCommand.CommandText = sql2;
myCommand.ExecuteNonQuery();
sql3 = "Update [Sheet1$] set result=" + yield + " where id=3";
myCommand.CommandText = sql3;
myCommand.ExecuteNonQuery();
MyConnection.Close();
//}
//catch (Exception ex)
//{
// MessageBox.Show(ex.ToString());
//}
}
【问题讨论】:
-
你能在本地复制一份excel文件,然后在那里运行你的代码吗?如果这行得通..你知道这只是一个网络问题。
-
是的,我已经提到它在我的本地驱动器上工作正常,但在网络上失败。
-
我喜欢使用
OleDbConnectionStringBuilder来帮助建立我的连接字符串。它有助于减少语法错误。 -
谢谢@S.Ahn,我正在看。我注意到在其中一个示例中使用 IP 地址引用网络!
标签: c# excel visual-studio-2010 visual-studio