使用C#和OLEDB更新Excel文件-网络文件问题
我没有很多使用C#处理Excel的经验。我用谷歌搜索了很多技术,但运气不错。我在升级公司网络上的Excel文件时遇到了一个问题。我在升级本地驱动器上的Excel文件时没有遇到任何问题,但是当它被定向到网络上的文件时,它会失败,“Microsoft Jet数据库引擎无法找到对象”\\nas1\eng\legacy\XView\u Results\Book1 XView test.xlsx”。请确保该对象存在,并且正确拼写其名称和路径名。” 我尝试将路径字符串更改为四个斜杠和两个斜杠。 “\\nas1\eng\legacy\XView\u Results\Book1 XView test.xlsx” 但它失败了,解释为: \\nas1\eng\legacy\XView\u 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;数据源=“+FileName+”;扩展属性='Excel 8.0;HDR=YES;IMEX=1;';'); 但是得到这个错误: “\nas1\eng\legacy\XView\u Results\Book1 XView test.xlsx”不是有效路径。确保路径名拼写正确,并且已连接到文件所在的服务器 任何想法都将不胜感激 下面是失败例程的代码:使用C#和OLEDB更新Excel文件-网络文件问题,c#,excel,visual-studio-2010,visual-studio,C#,Excel,Visual Studio 2010,Visual Studio,我没有很多使用C#处理Excel的经验。我用谷歌搜索了很多技术,但运气不错。我在升级公司网络上的Excel文件时遇到了一个问题。我在升级本地驱动器上的Excel文件时没有遇到任何问题,但是当它被定向到网络上的文件时,它会失败,“Microsoft Jet数据库引擎无法找到对象”\\nas1\eng\legacy\XView\u Results\Book1 XView test.xlsx”。请确保该对象存在,并且正确拼写其名称和路径名。” 我尝试将路径字符串更改为四个斜杠和两个斜杠。 “\\nas
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());
//}
}
尝试一个超级斜切路径
"\\\\Server\\MyNetworkDrive\\FolderOne\\FolderTwo\\MySuperCoolFile.xlsx"
@"\nas1\eng\legacy\XView_Results\Book1-xview-test.xlsx";
应该是这样吗
@"\\nas1\eng\legacy\XView_Results\Book1-xview-test.xlsx";
其他想法
在文件名周围加上单引号。实际上,我在每个“值”周围都加了单引号。为了保持一致
例如:
(@“provider=Microsoft.Jet.OLEDB.4.0;数据源=”“+FileName+”;扩展属性=”Excel 8.0;HDR=YES;IMEX=1;“;”)
请注意,单引号include用于包装“FileName”的值。为了解决问题,我的代码中更改了两件事。 1.将路径切换到映射模式,即映射到H:\file的\server\file 2.移除组件IMEX=1;来自MyConnection 以下是固定代码:
try
{
//string FileName = @"\\tiwnas1\eng\legacy\XView_Results\Book1-xview-test.xlsx";
//string theFile = GetPath(@"\\tiwnas1\eng\legacy\Book1-xview-test_v8.xls");
//string FileName = @"\\tiwnas1\eng\legacy\Book1-xview-test_v8.xls";
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='c:\\csharp.net-informations.xls';Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';");
//MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='\\\\tiwnas1\\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='\\tiwnas1\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='H:\\Book1-xview-test_v8.xls';Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';");
//MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='h:\\Book1-xview-test_v8.xls';Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';");
MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='h:\\Book1-xview-test_v8.xls';Extended Properties='Excel 8.0;HDR=YES;';");
//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=5.625 where id=1";
sql = "Update [Sheet1$] set result=" + od + " where id=1";
myCommand.CommandText = sql;
myCommand.ExecuteNonQuery();
//sql2 = "Update [Sheet1$] set result=5.375 where id=2";
sql2 = "Update [Sheet1$] set result=" + id + " where id=2";
myCommand.CommandText = sql2;
myCommand.ExecuteNonQuery();
//sql3 = "Update [Sheet1$] set result=110000 where id=3";
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地址!我也这么想,试了试,结果还是失败了。奇怪的是,错误消息显示了带有三个斜杠和一个斜杠的路径:“\\\server\mynet\folder1\folder2\coolfile.xlsx”。还在抓我的头!请看第一个注释掉的MyConnection。对不起,我应该仔细阅读。我对我的回答进行了编辑,关于“@”的事情。没关系@granadaCoder。检查我的单引号提示,我刚刚添加到我的答案中。我认为你的想法有道理,所以我尝试了一下。不幸的是,它失败了。以下是错误消息:“\\nas1\eng\legacy\XView\u Results\Book1 XView test.xlsx”不是有效路径。确保路径名拼写正确,并且已连接到文件所在的服务器。我已经检查了路径的拼写和有效性,它应该是有效的!