Vb.net 从Excel文件中读取值

Vb.net 从Excel文件中读取值,vb.net,excel,Vb.net,Excel,我想从12张excel表格中获取一个值。是否有任何方法可以在不打开excel工作表的情况下获取值? 我正在使用vb.net。如果有一种方法可以在不打开excel文件的情况下读取值,请发布一个示例代码。 谢谢如果不打开Excel文件,您将无法读取这些值。但您可以在不打开Excel的情况下读取这些值 如果文件以xml格式保存,则会更容易。如果不是,最简单的方法是仍然使用Excel,但使用Office Automation。困难的方法是创建一个excel文件解析器——对于非开放xml excel格式(

我想从12张excel表格中获取一个值。是否有任何方法可以在不打开excel工作表的情况下获取值? 我正在使用vb.net。如果有一种方法可以在不打开excel文件的情况下读取值,请发布一个示例代码。
谢谢

如果不打开Excel文件,您将无法读取这些值。但您可以在不打开Excel的情况下读取这些值

如果文件以xml格式保存,则会更容易。如果不是,最简单的方法是仍然使用Excel,但使用Office Automation。困难的方法是创建一个excel文件解析器——对于非开放xml excel格式(pre-Office 2003)非常困难——虽然很难,但仍然是可能的

但是,如果不打开文件,从excel电子表格中读取数据是不可能的

下面是一段代码,您可以利用Office Automation从VB.NET打开电子表格(它仍然打开文件,依赖Excel Automation DLL,但不需要打开Excel):

免责声明

以下代码不打算按原样使用,而只是一个示例,用于引导读者找到他们自己的解决方案,该解决方案应经过彻底测试

”下面的代码要求您添加对Office互操作程序集的引用
进入你的VB.NET项目(如果你不知道如何在谷歌上搜索)
xlApp=新建Excel.ApplicationClass

xlWorkBook=xlApp.Workbooks.Open(“我不知道有什么方法可以在不实际打开Excel电子表格的情况下从Excel电子表格中获取值,但如果存在此问题,您可以在不安装Office的情况下访问电子表格。请查看Office主互操作程序集的使用情况(请参阅).

您可以使用ADO.NET从Excel工作表中读取值。有关连接字符串的详细信息,请参阅


使用此代码

DimobjEXCELCon As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=EXCLE_FILE_PATH;Extended Properties=""Excel 12.0 Xml;HDR=Yes""")
ExcelConnection.Open()

Dim objQuery As String = "SELECT * FROM [Sheet1$]" 'get values from sheet1, here you can change your sheet name

Dim objCMD As OleDbCommand = New OleDbCommand(objQuery,objEXCELCon)
Dim objDR As OleDbDataReader

Dim SQLconn As New SqlConnection()
Dim szCON As String = "Connection string for database"
SQLconn.ConnectionString = szCON
SQLconn.Open()


Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(SQLConn)
bulkCopy.DestinationTableName = "TableToWriteToInSQLSERVER"

 Try
  objDR = objCMD.ExecuteReader
  bulCopy.WriteToServer(objDR)
  objDR.Close()
  SQLConn.Close()

 Catch ex As Exception
  MsgBox(ex.ToString)
 End Try

一种方法是创建一个excel应用程序对象并设置visible=false,然后打开excel。我不知道您是在寻找提高速度的方法,还是仅仅为了避免用户看到打开和关闭的excel文件。我已经使用了这个方法,它可以工作。我正在考虑使用ADO连接;我已经将它与access一起使用,效果非常好,excel可以用作数据库;我不知道如果其中一些文件没有数据库样式的数组(顶部的字段,向下的值),会发生什么情况?

我见过Office(excel、Word等)当自动应用程序突然决定显示一个模式对话框时,会严重中断。在有人关闭此类对话框之前,您的程序可能会挂起。不建议用于生产应用程序!您不可能是认真的..Alexander..上面的代码就是一个示例..我不希望任何人将其视为现状并盲目地在t中转储继承人的申请。我投票否决了,因为我认为你提供的解决方案不如使用ADO.NET。我认为这是一个有效的理由。事实上,一般的共识是,向下的投票应该被用来标记错误的答案,或者不适用于这个问题(我不相信我的问题)。.当然,每个人都可以自由地以他们认为合适的方式使用它们,我建议你们看一下关于MetaSO的以下讨论:用户要求在vb.net中使用代码,而不是C#…我应该投你反对票吗?谨慎地使用你的反对票,善待其他成员,这样你就会得到回报。哇,你们两个。希望重新点燃这场激烈的比赛7年前。
<connectionStrings>
    <add name="Default"
         connectionString='Microsoft.ACE.OLEDB.12.0;Data Source=c:\your\folder\file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES";'
         providerName="System.Data.OleDb" />
</connectionStrings>
using System.Data;
using System.Data.Common;

public int UserExists(string userName, int age)
{
    var provider = ConfigurationManager.ConnectionStrings["Default"].ProviderName;
    var factory = DbProviderFactories.GetFactory(provider);

    var connectionString = ConfigurationManager.ConnectionStrings["Default"].ConnectionString;

    using (var connection = factory.CreateConnection())
    {
        connection.ConnectionString = connectionString;

        using (DbCommand command = connection.CreateCommand())
        {
            DbParameter userNameParameter = factory.CreateParameter();
            userNameParameter.ParameterName = "@UserName";
            userNameParameter.DbType = DbType.String;
            userNameParameter.Direction = ParameterDirection.Input;
            userNameParameter.IsNullable = false;
            userNameParameter.Value = userName;


            DbParameter ageParameter = factory.CreateParameter();
            ageParameter.ParameterName = "@Age";
            ageParameter.DbType = DbType.Int32;
            ageParameter.Direction = ParameterDirection.Input;
            ageParameter.IsNullable = false;
            ageParameter.Value = age;

            command.CommandText = "SELECT COUNT(*) FROM [Users$] WHERE UserName=@UserName AND Age=@Age";
            command.Parameters.Add(userNameParameter);
            command.Parameters.Add(ageParameter);
            connection.Open();

            int usersExits = (int) command.ExecuteScalar();

            return usersExits == 1;
        }
    }
}
DimobjEXCELCon As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=EXCLE_FILE_PATH;Extended Properties=""Excel 12.0 Xml;HDR=Yes""")
ExcelConnection.Open()

Dim objQuery As String = "SELECT * FROM [Sheet1$]" 'get values from sheet1, here you can change your sheet name

Dim objCMD As OleDbCommand = New OleDbCommand(objQuery,objEXCELCon)
Dim objDR As OleDbDataReader

Dim SQLconn As New SqlConnection()
Dim szCON As String = "Connection string for database"
SQLconn.ConnectionString = szCON
SQLconn.Open()


Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(SQLConn)
bulkCopy.DestinationTableName = "TableToWriteToInSQLSERVER"

 Try
  objDR = objCMD.ExecuteReader
  bulCopy.WriteToServer(objDR)
  objDR.Close()
  SQLConn.Close()

 Catch ex As Exception
  MsgBox(ex.ToString)
 End Try