none
[VS.NET] 將html中的table表格匯入 xlsx 指定sheet RRS feed

  • 問題

  • 請問如何將 透過WebBrowser1抓到的網頁表格(TABLE) 寫入 xlsx檔案.
    網路上找的絕大部分是 在EXCLE透過巨集把資料弄進去
    但是在Visual basic 2010 要怎麼做呢? 謝謝!

    只能寫到這樣..匯入資料卡住了

     Private Sub Button_AutoGet_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_AutoGet.Click
    
    
            Dim testUR As String = "file://d:/test.html"
            WebBrowser1.Navigate(testUR) ' 瀏覽網址
    
            While Not WebBrowser1.ReadyState = WebBrowserReadyState.Complete
                System.Windows.Forms.Application.DoEvents()
                System.Threading.Thread.Sleep(1000)
            End While
    
            Dim out_temp As String
            out_temp = WebBrowser1.Document.GetElementsByTagName("TABLE")(0).InnerHtml
            out_temp = Replace(out_temp, "<TBODY>", "<TABLE>")
            out_temp = Replace(out_temp, "</TBODY>", "</TABLE>")
    
            Dim xlApp As Application
            Dim xlBook As Workbook
            Dim xlSheet As Worksheet
            Dim xlRange As Range
    
            On Error Resume Next
            '#一部電腦僅執行一個Excel Application, 就算中突開啟Excel也不會影響程式執行
            '#在工作管理員中只會看見一個EXCEL.exe在執行,不會浪費電腦資源
            '#引用正在執行的Excel Application
            xlApp = GetObject(, "Excel.Application")
            '#若發生錯誤表示電腦沒有Excel正在執行,需重新建立一個新的應用程式
            If Err.Number() <> 0 Then
                Err.Clear()
                '#執行一個新的Excel Application
                xlApp = CreateObject("Excel.Application")
                If Err.Number() <> 0 Then
                    MsgBox("電腦沒有安裝Excel")
                    End
                End If
            End If
    
            xlBook = xlApp.Workbooks.Open("d:\testiso.xlsx")
            xlApp.DisplayAlerts = False '停用警告訊息
            xlApp.Visible = True '設置EXCEL對象可見
            xlBook.Activate() '設定活頁簿為焦點
            xlBook.Parent.Windows(1).Visible = True '顯示第一個子視窗
            xlSheet = xlBook.Worksheets(1) '引用第一個工作表
            xlSheet.Activate() '設定工作表為焦點
            System.Threading.Thread.Sleep(5000)
    
    '======================抄來的還但是不能用=============================
            '#用Array寫資料至EXCEL
            'Dim myRows As Long, myCols As Long
            'myRows = UBound(DataArray, 1) + 1
            'myCols = UBound(DataArray, 2)
            'xlSheet.Range(xlApp.Cells(2, 1), xlApp.Cells(myCols, myRows)).Select() '選擇儲存格範圍
            'xlSheet.Range(xlApp.Cells(2, 1), xlApp.Cells(myCols, myRows)).Value = xlApp.Transpose(DataArray) '陣列一次寫入Excel
            'xlApp.Run("Sample.xlt" & "!Caculater") '呼叫Excel的巨集
    '======================抄來的還但是不能用=============================
     
            xlBook.SaveAs("d:\testiso-1.xlsx") '另存新檔
            xlBook.Close() '關閉當前活頁簿EXCEL
            System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) 'xlApp.Quit()
            GC.Collect()
        End Sub

    html檔

    <TABLE>
    <TR class=TRH align=middle>
    <TD>需求編號
    <TD>申請<BR>部門 
    <TD noWrap>申請人
    <TD>申請日期
    <TD>預計完成日 
    <TD>需求型態 
    <TD>需求類別 
    <TD>需求主旨(摘要)
    <TD>狀態(負責人)</TD>
    <TD>實際<BR>工時 </TD>
    <TR class=TRB align=middle>
    <TD><A href="IRS001Detail.asp?irid=6MX1234561">6MX1234561</A></TD>
    <TD>MJ</TD>
    <TD>陳先生</TD>
    <TD>2012/9/21</TD>
    <TD>2012/9/21</TD>
    <TD align=left>網路,軟硬體</TD>
    <TD align=left>軟體維護</TD>
    <TD align=left>軟體維護</TD>
    <TD><SPAN style="COLOR: blue; CURSOR: hand" language=javascript onclick="window.open('../inc/BK_VIEW.asp?sType=Q&amp;BRE_NO=IRS001&amp;AUDIT_NO=IRSC04&amp;KEY_NO_A=6MX1234561&amp;KEY_NO_B=6MX1234561&amp;TITLE_NAME=%B8%EA%B0T%BB%DD%A8D%B3%E6%BCf%AE%D6%B0O%BF%FD&amp;KEY_NO_A_NAME=%B8%EA%B0T%BB%DD%A8D%B3%E6%B8%B9','BK_VIEW','scrollbars=yes,resizable=yes,top=0,width=790,height=550,left=0')"><U>驗收中(陳先生)</SPAN></U></TD>
    <TD>0.5 </TD>
    <TR class=TRA align=middle>
    <TD><A href="IRS001Detail.asp?irid=6M1234562">6MX1234562</A></TD>
    <TD>MJ</TD>
    <TD>陳小姐</TD>
    <TD>2012/9/21</TD>
    <TD>2012/9/25</TD>
    <TD align=left>網路,軟硬體</TD>
    <TD align=left>軟體維護</TD>
    <TD align=left>5F 會議室NB無法投影, 請...</TD>
    <TD><SPAN style="COLOR: blue; CURSOR: hand" language=javascript onclick="window.open('../inc/BK_VIEW.asp?sType=Q&amp;BRE_NO=IRS001&amp;AUDIT_NO=IRSC04&amp;KEY_NO_A=6MX1234562&amp;KEY_NO_B=6MX1234562&amp;TITLE_NAME=%B8%EA%B0T%BB%DD%A8D%B3%E6%BCf%AE%D6%B0O%BF%FD&amp;KEY_NO_A_NAME=%B8%EA%B0T%BB%DD%A8D%B3%E6%B8%B9','BK_VIEW','scrollbars=yes,resizable=yes,top=0,width=790,height=550,left=0')"><U>MS作業審查(王小姐)</SPAN></U></TD>
    <TD>0.3 </TD>
    </TABLE>

    查了不少資料了 但是塞不進去
    演練:創建您的第一個 Excel 應用程序級外接程序
    如何快速地把一維陣列的內容填入Excel 的指定Range?
    前輩請問,將html table輸出成Excel時,文數字表示法問題?
    [VB .NET] Microsoft.Office.Interop.Excel 讀 / 寫 Excel 語法概全
    [Office][C#] NPOI、OpenXML SDK、OpenOffice.org SDK 寫入資料到 EXCEL 檔案
    [RESOLVED] Reference to non-shared member error
    Microsoft.Office.Interop.Excel Namespace
    【導出EXCEL彙編】asp.net 將數據導出到excel中,並設置其格式
    [求助] 需要翻頁提取多頁網頁數據問題,謝謝浪板!
    [求助] 網頁導入excel問題,請幫忙看下這段代碼



    • 已編輯 X Z 2012年9月24日 下午 02:47
    2012年9月24日 下午 02:02

解答

  • 把觀點拉遠一點

    你的問題是,不會解析HTML的Table,還是 不會將資料寫入EXCLE呢?

    我會建議你把輸入、解析、輸出分成三個部分處理

    1. 先將輸入的資料解析成二維陣列(或是一維陣列的一維陣列)。這部分我第一直覺想到的是正則表示法。但要小心其他的HTML標籤與span。

    2. 將解析好的陣列輸出到EXCLE內。依照陣列的x、y,將東西放到Excel裡面,應該不太難吧。

    1的部分,也可以改成用HtmlElement.Children 來走訪row與cell。


    2012年9月24日 下午 05:07

所有回覆

  • 想辦法自己切html 

    table 中每一個tr 代表一個row 每一個td 代表一個cell


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2012年9月24日 下午 03:45
  • 想辦法自己切html 

    table 中每一個tr 代表一個row 每一個td 代表一個cell


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    謝謝 ~ 這方法不會 應該會沒看懂 會的話就是和我之前查到的
    如何快速地把一維陣列的內容填入Excel 的指定Range?

    來詢問怎麼加速..因為這個方式可能會遇到一樣的問題!
    繼續努力ing

    2012年9月24日 下午 04:19
  • 把觀點拉遠一點

    你的問題是,不會解析HTML的Table,還是 不會將資料寫入EXCLE呢?

    我會建議你把輸入、解析、輸出分成三個部分處理

    1. 先將輸入的資料解析成二維陣列(或是一維陣列的一維陣列)。這部分我第一直覺想到的是正則表示法。但要小心其他的HTML標籤與span。

    2. 將解析好的陣列輸出到EXCLE內。依照陣列的x、y,將東西放到Excel裡面,應該不太難吧。

    1的部分,也可以改成用HtmlElement.Children 來走訪row與cell。


    2012年9月24日 下午 05:07
  • 把觀點拉遠一點

    你的問題是,不會解析HTML的Table,還是 不會將資料寫入EXCLE呢?

    我會建議你把輸入、解析、輸出分成三個部分處理

    1. 先將輸入的資料解析成二維陣列(或是一維陣列的一維陣列)。這部分我第一直覺想到的是正則表示法。但要小心其他的HTML標籤與span。

    2. 將解析好的陣列輸出到EXCLE內。依照陣列的x、y,將東西放到Excel裡面,應該不太難吧。

    1的部分,也可以改成用HtmlElement.Children 來走訪row與cell。


    謝謝提點~
    我會試著朝 HtmlElement.Children 方向去查看看資料
    我是看看怎麼把查到的資料抽出 (輸入、解析、輸出分成三個部分)
    不過資料只有三頁 @@
    搜尋結果



    • 已編輯 X Z 2012年9月25日 上午 12:42
    2012年9月25日 上午 12:39
  • HTML Table to DataTable 的話

    可以參考這篇討論與文章

    http://stackoverflow.com/questions/10513529/getting-data-from-html-table-into-a-datatable
    http://blog.hypercomplex.co.uk/index.php/2010/05/parsing-html-tables-into-system-data-datatable/

    2012年9月28日 上午 06:22