3

vb.netを使用してファイルExcelからシート名を取得し、テキストボックスに表示しようとしています。私はこのコードを試してみました:

Imports Microsoft.Office.Interop
Private Sub GetSheetsName
Dim efa As New Excel.Application
Dim ewb As Excel.Workbook
Dim ews As Excel.Worksheet
Dim fileName as string
fileName="D:\test.xls"
ewb = efa.Workbooks.Open(fileName)
For Each ews In ewb.Worksheets
   ExcelSheetName += ews.Name & vbNewLine
Next ews
TextBox1.text=ExcelSheetName
end sub

そのコードはファイルexcel*.xlsで機能し、テキストボックスにファイルtest.xlsのスプレッドシート名を表示します

Sheet1
Sheet2
Sheet3

しかし、Excel 2007(* .xlsx)を試してみると、次のようなエラーメッセージが表示されます。 エラーメッセージ

私は何をすべきか?手伝ってくれませんか。

4

3 に答える 3

11

このコードを試してください:

Private Sub GetExcelSheetNames(ByVal fileName As String)
    Dim strconn As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & 
          fileName & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
    Dim conn As New OleDbConnection(strconn)

    conn.Open()

    Dim dtSheets As DataTable = 
              conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
    Dim listSheet As New List(Of String)
    Dim drSheet As DataRow

    For Each drSheet In dtSheets.Rows
        listSheet.Add(drSheet("TABLE_NAME").ToString())
    Next

    //show sheetname in textbox where multiline is true
    For Each sheet As String In listSheet
        TextBox1.Text = TextBox1.Text & sheet & vbNewLine
    Next

    conn.Close()

End Sub
于 2012-12-03T05:48:56.710 に答える
0

xlsxファイルを処理するための優れたライブラリはEPPlusです。

サンプルコードは次のとおりです。

var existingFile = new FileInfo(path);
var sheets = new List<string>();
using (var package = new ExcelPackage(existingFile))
{
    sheets.AddRange(from worksheet in package.Workbook.Worksheets where worksheet.Dimension != null select worksheet.Name);
}

あなたはここでそれを見つけることができます:http://epplus.codeplex.com/

于 2012-11-29T04:12:19.300 に答える
0

使ってみてください

For Each ews In ewb.Sheets
   ExcelSheetName += ews.Name & vbNewLine
Next ews
于 2012-11-29T04:46:17.700 に答える