繁体   English   中英

从Excel文件中读取值

[英]Reading values from an Excel File

我想从12 excel表中获得一个值。 有没有办法在没有打开excel表的情况下获得价值? 我正在使用vb.net。 如果有办法在不打开excel文件的情况下读取值,请发布示例代码。 谢谢

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

如果文件以xml格式保存,那将更容易。 如果没有,最简单的方法是仍然使用Excel但使用Office Automation来执行此操作。 困难的方法是创建一个excel文件解析器 - 非常开放的xml excel格式(Office 2003之前)很难 - 很难但仍然可能。

但是,如果不打开文件就无法从excel电子表格中读取。

这里有一段代码可以用来从VB.NET打开电子表格,利用Office Automation(它仍然打开文件,依赖于Excel自动化dll,但不需要打开Excel):

免责声明

以下代码不是按原样使用,而只是它是一个示例,以指导读者自己的解决方案,应该进行彻底的测试。

' The code below requires you to add references to Office Interop assemblies
' into your VB.NET project  (if you don't know how to do that search Google)

xlApp = New Excel.ApplicationClass
xlWorkBook = xlApp.Workbooks.Open("<YOUR EXCEL SPREADSHEET FILE HERE")
xlWorkSheet = xlWorkBook.Worksheets("sheet1")

range = xlWorkSheet.UsedRange

For rCnt = 1 To range.Rows.Count
    For cCnt = 1 To range.Columns.Count
        Obj = CType(range.Cells(rCnt, cCnt), Excel.Range)
        ' Obj.value now contains the value in the cell.. 
    Next
Next

您可以使用ADO.NET从Excel工作表中读取值。 有关连接字符串的更多信息,请访问http://www.connectionstrings.com/excel-2007

<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>

然后,您可以使用标准System.Data.OleDb.OleDbConnection从数据源中读取值。 例如,考虑一个Excel文件,其中包含名为Users的工作表,其中包含两列, UserNameAge

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

我不知道有什么方法可以从Excel电子表格中获取值而不实际打开它,但如果您遇到问题,则无需安装Office即可访问电子表格。 看看使用Office主互操作程序集(请参阅此处 )。

一种方法是创建一个excel应用程序对象并设置visible = false,然后打开excel。 我不知道你是在寻找增加速度的东西,还是只是为了避免让用户看到打开和关闭的excel文件。 我用过这个,它的确有效。 我正在考虑使用ADO连接; 我已经将它用于访问,它们工作得很好,而excel可以用作数据库; 我只是不知道如果其中一些文件没有数据库样式数组会发生什么(字段在顶部,值会下降)?

暂无
暂无

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

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