返回列表 上一主題 發帖

[發問] 如何在不打開檔案下,將XML檔或CSV檔匯入EXCEL中

本帖最後由 GBKEE 於 2018-1-18 17:05 編輯

回復 6# paul3063
放那裡都可以,2003跑程式約需2分鐘,其他版本約8-10秒
試試看
  1. Option Explicit
  2. Sub Ex_CVS的分割()
  3.     Dim i As Long, S As Variant, Ar As Variant, X As Long, xData As Long, Sh As Integer, xTime As Date
  4.     Dim Msg As String
  5.     xTime = Time
  6.     On Error GoTo XER
  7.     With CreateObject("Microsoft.XMLHTTP")
  8.         .Open "POST", "D:\EXCEL\36_2.csv", 0
  9.         .send
  10.         S = Split(.responseText, vbCrLf)
  11.     End With
  12.     xData = 10000 '**每一工作表分割資料數 10000
  13.     Ar = Replace(S(0), """,""", ",")
  14.     Ar = Replace(Ar, """", "")
  15.     Ar = Split(Ar, ",")
  16.    
  17.     For i = 1 To Application.Ceiling(UBound(S) / xData, 1)
  18.         Sheets(i).Cells.Clear
  19.         Sheets(i).Cells(1, "a").Resize(, UBound(Ar) + 1) = Ar
  20.     Next
  21.     Sh = 1
  22.     X = 2
  23.     For i = 1 To UBound(S)
  24.         If i >= xData And i Mod xData = 0 Then Sh = Sh + 1: X = 2
  25.         Ar = Replace(S(i), """,""", ",")
  26.         Ar = Replace(Ar, """", "")
  27.         Ar = Split(Ar, ",")
  28.         Sheets(Sh).Cells(X, "a").Resize(, UBound(Ar) + 1) = Ar
  29.         X = X + 1
  30.     Next
  31.     MsgBox Application.Text(Time - xTime, ["m分:S秒"]) & " ok"
  32.     If Msg <> "" Then
  33.         MsgBox Msg
  34.         ThisWorkbook.Sheets.Add , Sheets(Sheets.Count)
  35.         Ar = Application.Transpose(Split(Msg, vbLf))
  36.         ActiveSheet.Range("a1").Resize(UBound(Ar) + 1) = Ar
  37.     End If
  38. Exit Sub
  39. XER:
  40.   
  41.     Dim ii
  42.      '處理程式中 Sheets(i).Cells.Clear ˇ的錯誤
  43.     If Err = 9 Then ThisWorkbook.Sheets.Add , Sheets(Sheets.Count): Resume
  44.      '處理程式中 .Resize(, UBound(Ar) + 1) = Ar ˇ的錯誤
  45.    '2003 **陣列的元素字元數大於255 個字元,會有錯誤
  46.    '2003 以後的版本沒有此錯誤
  47.     For ii = 0 To UBound(Ar)
  48.         Sheets(Sh).Cells(X, ii + 1) = Ar(ii)
  49.         If Len(Ar(ii)) > 456 Then
  50.             Msg = Msg & Sheets(Sh).Cells(X, ii + 1).Address(, , , 1, 1) & " 字元數" & Len(Ar(ii)) & vbLf
  51.         End If
  52.     Next
  53.     Resume Next

  54. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 GBKEE 於 2018-1-17 11:21 編輯

回復 9# paul3063

QueryTable 是沒有終止列這屬性
你的程式碼在2003運行還是受到65536列的限制
如圖

修改程式看看 2003,2010 的差異
  1. Option Explicit
  2. Sub Macro4()
  3.    Dim i As Integer
  4.     For i = 1 To IIf(Rows.Count > 65536, 1, 2)
  5.         With Sheets(i).QueryTables.Add(Connection:="TEXT;d:\excel\36_2.csv" _
  6.             , Destination:=Sheets(i).Range("A" & i))
  7.             .Name = "36_4"
  8.             .FieldNames = True
  9.             .RowNumbers = True
  10.             .RefreshStyle = xlInsertDeleteCells
  11.             .SaveData = True
  12.             .AdjustColumnWidth = False  '自動將欄寬調整為最適合的大小
  13.             .TextFilePlatform = -535
  14.             .TextFileStartRow = IIf(i = 1, 1, 32767)
  15.             .TextFileCommaDelimiter = True '***
  16.             .Refresh BackgroundQuery:=False
  17.     End With
  18.     If i = 2 Then Sheets(2).Rows(1) = Sheets(1).Rows(1).Value
  19.     Next
  20. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 11# paul3063

8#這段程式碼就是 處理工作表不存在 ,請練習看看
  1. XER:
  2.     Dim ii
  3.      '處理程式中 Sheets(i).Cells.Clear ˇ的錯誤
  4.     If Err = 9 Then ThisWorkbook.Sheets.Add , Sheets(Sheets.Count): Resume
  5.      '處理程式中 .Resize(, UBound(Ar) + 1) = Ar ˇ的錯誤
  6.    '2003 **陣列的元素字元數大於255 個字元,會有錯誤
  7.    '2003 以後的版本沒有此錯誤
  8.     For ii = 0 To UBound(Ar)
  9.         Sheets(Sh).Cells(i + Sh - X, ii + 1) = Ar(ii)
  10.         If Len(Ar(ii)) > 456 Then
  11.         Debug.Print Sh, i + 1 - X, ii, Len(Ar(ii))
  12.         End If
  13.     Next
  14.     Resume Next
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 14# jackyq
2003 版
Public Sub 扁我______() 對照  #8 的 Sub Ex_CVS的分割()  中 找出一些差異


[Book1]Sheet1!$L$979 字元數1000        [Book1]Sheet3!$L$3692 字元數1000
[Book1]Sheet1!$L$2160 字元數1000        [Book1]Sheet3!$L$3693 字元數1000
[Book1]Sheet1!$L$2161 字元數1000        [Book1]Sheet3!$M$5833 字元數988
[Book1]Sheet1!$Q$2529 字元數1042        [Book1]Sheet3!$M$5834 字元數988
[Book1]Sheet2!$M$3438 字元數988        [Book1]Sheet3!$L$6259 字元數1000
[Book1]Sheet2!$M$3474 字元數988        [Book1]Sheet3!$L$6260 字元數1000
[Book1]Sheet2!$AD$4019 字元數1058        [Book1]Sheet3!$Q$6409 字元數1067
[Book1]Sheet2!$M$4027 字元數988        [Book1]Sheet3!$M$7768 字元數988
[Book1]Sheet2!$M$4083 字元數988        [Book1]Sheet3!$M$9390 字元數988
[Book1]Sheet2!$AD$4090 字元數1058        [Book1]Sheet3!$M$9391 字元數988
[Book1]Sheet2!$M$4578 字元數988        [Book1]Sheet4!$Q$2957 字元數1067
[Book1]Sheet2!$M$4615 字元數988        [Book1]Sheet4!$Q$3005 字元數1067
[Book1]Sheet2!$M$4618 字元數988        [Book1]Sheet4!$Q$4840 字元數1028
[Book1]Sheet2!$M$4703 字元數988        [Book1]Sheet4!$Q$4841 字元數1028
[Book1]Sheet2!$M$4909 字元數988        [Book1]Sheet4!$Q$8504 字元數1028
[Book1]Sheet2!$M$4910 字元數988        [Book1]Sheet5!$AC$2302 字元數1759
[Book1]Sheet2!$M$4942 字元數988        [Book1]Sheet5!$AA$9490 字元數1282
[Book1]Sheet2!$M$4943 字元數988        [Book1]Sheet6!$Q$5208 字元數1204
[Book1]Sheet2!$AD$5049 字元數1058        [Book1]Sheet6!$Q$5563 字元數1024
[Book1]Sheet2!$AD$5050 字元數1058        [Book1]Sheet7!$AD$1329 字元數1058
[Book1]Sheet2!$AD$7966 字元數1759        [Book1]Sheet7!$AB$1333 字元數1058
[Book1]Sheet2!$AB$9480 字元數1759        [Book1]Sheet7!$AA$5423 字元數945
[Book1]Sheet2!$Q$9482 字元數1024
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 手心向下是助人,手心向上是求人;助人快樂,求人痛苦。
返回列表 上一主題