繁体   English   中英

使用C#和OLEDB更新Excel文件-网络文件问题

[英]Update Excel file using C# and OLEDB - Network file issue

我没有很多使用C#与Excel结合使用的经验。 我不得不用Google搜索很多技巧,但是运气很好。 导致我出现此问题的是我尝试在公司网络上升级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#技术与@字符串FileName = @“ \\ nas1 \\ eng \\ legacy \\ XView_Results \\ Book1-xview-test.xlsx”一起使用; 并将命令更改为:MyConnection = new System.Data.OleDb.OleDbConnection(@“ provider = Microsoft.Jet.OLEDB.4.0; Data Source =” + FileName +“;扩展属性='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());
        //}
    }

尝试一条超级大路。

"\\\\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; Data Source ='” + FileName +“';扩展属性='Excel 8.0; HDR = YES; IMEX = 1;';”);

请注意,单引号包括将“ FileName”的值包装起来。

为了解决我的问题,我的代码中进行了两处更改。 1.将路径切换到映射模式,即\\ server \\ file映射到H:\\ 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());
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM