none
[VB2008]讀取EXCEL某一個欄位問題 RRS feed

  • 問題

  • 在網路上收尋到很多有關VB6的寫法
    套到2008上都顯示RANGE無法轉換成字串
    但寫入時卻可以指定儲存格寫入,讀取卻做不出來
    temp.Range("D2") = "123456789"
    反過來用卻不行
    a=temp.Range("D2")
    用OleDb讀取遇到合併儲存格就亂掉了
    OpenFileDialog1.FileName = ""
            OpenFileDialog1.InitialDirectory = "C:\Historical\Test"
            OpenFileDialog1.Filter = "EXCEL (*.xls)|*.XLS"
            If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.Cancel Then Exit Sub
            
    
            str = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & OpenFileDialog1.FileName & ";Extended Properties='Excel 8.0;HDR=no;IMEX=0';"
            Using cn As New OleDbConnection(str)
                cn.Open()
                Dim qs As String = "select * from[Sheet1$]"
                Try
                    Using cmd As New OleDbCommand(qs, cn)
                        Using dr As OleDbDataReader = cmd.ExecuteReader()
                            Do Until dr.Read = False
                                a(0) += 1
                                If dr(0).ToString <> "" Then
                                    If a(0) = 1 Then
                                        TextBox1.Text = dr(0)
                                        TextBox2.Text = dr(5)
                                        TextBox3.Text = dr(11)
                                        TextBox4.Text = dr(8)
                                    ElseIf a(0) = 2 Then
                                        TextBox5.Text = dr(0)
                                        TextBox6.Text = dr(1)
                                        TextBox7.Text = dr(2)
                                        TextBox8.Text = dr(8)
                                    ElseIf a(0) = 3 Then
                                        TextBox9.Text = dr(0)
                                        TextBox10.Text = dr(1)
                                        TextBox11.Text = dr(2)
                                        TextBox12.Text = dr(3)
                                    End If
                                End If
                            Loop
                        End Using
                    End Using
                Catch ex As Exception
                    MessageBox.Show(ex.Message)
                End Try
            End Using
    不知道為什麼前幾行都會讀不到

    用網路上大家討論的VB6用法
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim oexcel, oworkbooks, newbook, newsheet, s
            oexcel = CreateObject("Excel.application")
            oworkbooks = oexcel.Workbooks
            newbook = oworkbooks.Open("C:\Documents and Settings\Administrator\桌面\test.xls")
            newsheet = newbook.Worksheets(1)
            Dim a
    a = GetObject(, "Excel.Application") TextBox1.Text = a.Workbooks(1).Sheets(1).range("C2") TextBox2.Text = a.Workbooks(1).Sheets(1).range("D2") TextBox3.Text = a.Workbooks(1).Sheets(1).range("E2") TextBox4.Text = a.Workbooks(1).Sheets(1).range("F2") TextBox5.Text = a.Workbooks(1).Sheets(1).range("G2")
    End Sub
    這個寫法會出現無法轉換成字串

    請問前輩如果要找出EXCEL所有相關的語法,該如何找呢?
    在網路上收尋很多相關字串都收尋不到
    .Range
    .DisplayAlerts
    .ActiveWorkbook
    這些指令
    VB初學者請大家多指教
    2010年1月5日 上午 08:13

解答

  • 你第一段程式碼是用 Oledb ,第二段程式碼是用 Automation ,這兩種方法都可以分別用在 vbnet / vb6 ,請明確的把你的需求寫清楚。

    這段請改成:
    TextBox2.Text = a.Workbooks(1).Sheets(1).range("D2").Value

    VB6 跟 Excel 一樣用 oleaut32.dll 的 Variant Object ,VBNET 不用這種型態,所以請明確的指定屬性。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 maxcha 2010年1月12日 上午 12:34
    2010年1月5日 上午 08:45
  • oledb 是當資料庫處理,所以只能處理有關資料庫的功能。資料庫功能中並沒有欄或列的合併。

    要參照 Excel 物件程式庫才會顯示成員,請確認安裝 Office 時,有安裝 .Net 支援相關功能,並確認已安裝 VSTO 。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 maxcha 2010年1月12日 上午 12:35
    2010年1月6日 上午 03:45
  •         temp.visible = True
            temp.Worksheets("Sheet1").Printpreview(False)

    PrintPreview of Excel in VB.Net

    Worksheet.PrintPreview 方法

    Microsoft.Office.Tools.Excel 命名空間

    Visible要設為True才能預覽,參考以上...



    • 已編輯 Joe Hung 2010年1月6日 上午 08:28
    • 已標示為解答 maxcha 2010年1月12日 上午 12:35
    2010年1月6日 上午 06:16

所有回覆

  • 你第一段程式碼是用 Oledb ,第二段程式碼是用 Automation ,這兩種方法都可以分別用在 vbnet / vb6 ,請明確的把你的需求寫清楚。

    這段請改成:
    TextBox2.Text = a.Workbooks(1).Sheets(1).range("D2").Value

    VB6 跟 Excel 一樣用 oleaut32.dll 的 Variant Object ,VBNET 不用這種型態,所以請明確的指定屬性。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 maxcha 2010年1月12日 上午 12:34
    2010年1月5日 上午 08:45
  • 我的需求是想讀取特定儲存格的值
    會用這兩種方法是因為試不出來才多方嘗試
    不過可以確定的是用Oledb讀取的話
    遇到合併儲存格他會有錯誤

    請問前輩為什麼用到EXCEL相關的指令VB不會自動顯示他所有成員?

    如果要在VB裡開啟開啟EXCEL預覽列印該怎麼做?
    OpenFileDialog1.FileName = ""
            OpenFileDialog1.InitialDirectory = "C:\Historical\Test"
            OpenFileDialog1.Filter = "EXCEL (*.xls)|*.XLS"
            If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.Cancel Then Exit Sub
            temp = CreateObject("Excel.Application")
            temp.Workbooks.Open(OpenFileDialog1.FileName)
            temp.Worksheets("Sheet1").Printpreview()
    我這樣寫不但沒反應,還當在那邊
    請前輩指點迷津
    VB初學者請大家多指教
    2010年1月6日 上午 02:33
  • oledb 是當資料庫處理,所以只能處理有關資料庫的功能。資料庫功能中並沒有欄或列的合併。

    要參照 Excel 物件程式庫才會顯示成員,請確認安裝 Office 時,有安裝 .Net 支援相關功能,並確認已安裝 VSTO 。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 maxcha 2010年1月12日 上午 12:35
    2010年1月6日 上午 03:45
  •         temp.visible = True
            temp.Worksheets("Sheet1").Printpreview(False)

    PrintPreview of Excel in VB.Net

    Worksheet.PrintPreview 方法

    Microsoft.Office.Tools.Excel 命名空間

    Visible要設為True才能預覽,參考以上...



    • 已編輯 Joe Hung 2010年1月6日 上午 08:28
    • 已標示為解答 maxcha 2010年1月12日 上午 12:35
    2010年1月6日 上午 06:16
  • 請問前第一個連結要在哪看程式碼?
    找不到程式碼所在地
    VB初學者請大家多指教
    2010年1月6日 上午 07:42
  • ...
    畫面上點下 View this solution
    註冊後 30 免費看
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年1月6日 上午 08:28
  • 請問一定要先顯示EXCEL檔案才能預覽嗎?
    我嘗試設定預覽視窗的顯示
    temp = CreateObject("Excel.Application")
    temp.Workbooks.open("C:\Documents and Settings\Administrator\桌面\123.xls")
    temp.ActiveWorkbook.ActiveSheet.PrintPreview.Visible = True
    temp.ActiveWorkbook.ActiveSheet.PrintPreview(False)

    沒有錯誤訊息不過都會當掉沒有反應
    有辦法作到只顯示預覽視窗

    而不顯示檔案視窗嗎?



    VB初學者請大家多指教
    2010年1月7日 上午 02:20