Board logo

標題: [發問] 如何將超過65536筆以上的資料放入活頁簿,請家族高手賜教 [打印本頁]

作者: pupai    時間: 2011-10-11 09:30     標題: 如何將超過65536筆以上的資料放入活頁簿,請家族高手賜教

資料筆數超過65536,如何將超過65536筆以上的資料放入活頁簿,請家族高手賜教

EX:
SAS檔:cdoofile.sas7bdat (筆數會超過65536,總筆數:未知)
希望有程式可以依序將65536筆資料放入各工作表
sheet1   1-65536筆
sheet2   65537-131072筆
sheet3   ...以此類推到最末筆

謝謝!!
PS:因對VB程式語言不是很了解,可否用GIF動畫錄製工具
作者: GBKEE    時間: 2011-10-11 15:06

回復 1# pupai
你應該是要上傳 SAS檔:cdoofile.sas7bdat
作者: pupai    時間: 2011-10-11 15:38

回復  pupai
你應該是要上傳 SAS檔:cdoofile.sas7bdat
GBKEE 發表於 2011-10-11 15:06



版大好
我有拜讀過你 http://forum.twbts.com/thread-3681-1-18.html 的文章
我想說可否SAS檔在匯入ex時可以依照欄位一筆一筆匯入(而不是全部集中在A欄位處)
謝謝!!
PS:SORRY剛剛按到回覆不好意思
cdoofile.sas7bdat檔下載處 http://www.FunP.Net/389588
作者: GBKEE    時間: 2011-10-11 16:45

回復 3# pupai
抱歉:幫不上忙
你的 SAS檔轉的文字檔,找不出規律性,可以匯入A欄,更不用說一一匯入每欄中
作者: pupai    時間: 2011-10-11 17:02

回復 4# GBKEE


    版大
那的話,承蒙您費心了
謝謝
作者: pupai    時間: 2011-10-11 17:30

回復 4# GBKEE


版大
我突然想到,如果我把SAS檔資料轉成文字檔
那你可以修改你之前的程式,將資料依序匯入每欄中嗎?
謝謝
作者: kimbal    時間: 2011-10-11 19:11

回復 6# pupai


    你可以發一下上來看看先
作者: pupai    時間: 2011-10-11 20:36

回復 7# kimbal


    版大
可能誤會我的意思,我就是不懂才請教諸位(我不會VB阿!!~~:'( )
我剛的意思是說:如果我事先把SAS檔轉存成TXT檔,
那GBKEE 大~是否可以修改他先前 http://forum.twbts.com/thread-3681-1-18.html 的程式
讓資料依序匯入每欄中(而不是全部集中在A欄位處)~
作者: GBKEE    時間: 2011-10-12 15:22

回復 8# pupai
回復  pupai
    你可以發一下上來看看先  是請你上傳txt :文件需用壓縮檔上傳
kimbal 發表於 2011/10/11 19:11

cdoofile.sas7bdat檔下載處'http://www.funp.net/389588]http://www.funp.net/389588 這不是 文字檔嗎?
作者: pupai    時間: 2011-10-12 20:13

回復 9# GBKEE


    版大
SAS檔轉TXT檔結果如附件
作者: dechiuan999    時間: 2011-10-12 23:24

你好:
  請先試試是否可行
Sub tt()
   
    '請先設定引用Microsoft Scripting Runtime
   
    Dim mFso As Scripting.FileSystemObject
    Dim mTxt As Scripting.TextStream
    Dim mStr As String
    Dim mPath$, mFile$
    Dim ar(), ar1(), ar2()
    Dim s%, s1 As Long, s2 As Long, m%, m1%, i%, j%
    Dim mSplit
   
   
    mPath = "C:\Documents and Settings\mine\My Documents\"
    mFile = "SAS檔轉TXT檔的結果.txt"
   
    Set mFso = CreateObject("Scripting.FileSystemObject")   
    Set mTxt = mFso.OpenTextFile(Filename:=mPath & mFile, IOMode:=ForReading)   
    With mTxt
        Do Until .AtEndOfStream
            mStr = .ReadLine
            mSplit = Split(mStr)
            For s = 0 To UBound(mSplit)
                ReDim Preserve ar(s)
                ar(s) = mSplit(m)
                m = m + 1
            Next
            
            ReDim Preserve ar1(s1)
            ar1(s1) = ar
            s1 = s1 + 1
            
            m = 0
            Erase ar
            
            If s1 > 65536 Then
                ReDim Preserve ar2(s2)
                ar2(s2) = ar1
                s2 = s2 + 1
                Erase ar1
                s1 = 0
            End If
           
         Loop
        .Close
    End With
   
    Erase ar1
    s1 = 0
   
    m1 = Worksheets.Count
    For i = m1 + 1 To s2
        Worksheets.Add
    Next
   
    For s1 = 0 To UBound(ar2)
      
        Worksheets(s1 + 1).Range("a1").Resize(65536, 24) = Application.Transpose(Application.Transpose(ar2(s1)))
    Next        
   
    Set mTxt = Nothing                                    
    Set mFso = Nothing   
   
End Sub
作者: GBKEE    時間: 2011-10-13 17:37

回復 10# pupai
試試看
SAS檔轉TXT檔的結果.txt 只有5056列的資料 尚未達 65536列
  1. Sub Ex()
  2.     Dim TheFile  As String, Mystr As Variant
  3.     Dim Sh As Integer, i As Long
  4.     TheFile = "D:\TEST\SAS檔轉TXT檔的結果.txt"
  5.     i = 1: Sh = 1
  6.     Open TheFile For Input As #1            '開啟文字檔
  7.     Sheets(Sh).Activate                     'Sh=1: 第1個工作表成為使用中的工作表
  8.     ActiveSheet.Cells.Clear                 '清除作用中工作表所有的儲存格的資料
  9.     Do While Not EOF(1)                     '不是檔案底部時 執行迴圈
  10.         Line Input #1, Mystr                '從已開啟的循序讀取資料,並將資料指定給變數。->mystr
  11.         Mystr = Replace(Mystr, """", "")    '清除 資字串中的 " 符號
  12.         Mystr = Split(Mystr, " ")           '依據自字串中 的(此處是: 一個空白字元) 符號 分割為 傳回一維的陣列
  13.         ActiveSheet.Cells(i, "A").Resize(1, UBound(Mystr) + 1) = Mystr
  14.         i = i + 1                '下一列
  15.         If i > Rows.Count Then   'Rows.Count 列的總數
  16.             i = 1
  17.             Sh = Sh + 1
  18.             On Error GoTo WorkSheet_Add   '工作表數<>Sh 會產生錯誤
  19.             Sheets(Sh).Active             '第 Sh 個工作表成為使用中的工作表
  20.             ActiveSheet.Cells.Clear
  21.         End If
  22.     Loop
  23.     Close #1
  24.     Exit Sub
  25. WorkSheet_Add:   '處裡:  工作表數<> Sh 產生的錯誤
  26.     Sheets.Add AFTER:=Sheets(Sheets.Count)     '新增工作表
  27.     Err.Clear                                  '清除錯誤值
  28.     Resume                                     '重回錯誤的地方
  29. End Sub
複製代碼

作者: pupai    時間: 2011-10-14 11:18

回復 12# GBKEE


謝謝各位的幫忙...
經我測試結果,資料如果小分頁的話可以使用GBKEE的方法
但如果要用EXCEL讀取資料庫的方式,畢竟還是有受限............
尤其活頁簿中的工作表多寡又受限於自己電腦可用的記憶體大小........
所以啊!!~謝謝大家幫忙~
作者: kimbal    時間: 2011-10-14 13:37

其實,如果資料多, 用access會比較方便,
當然最重要的是用數據來做什麼.
作者: diabo    時間: 2011-10-15 20:11

印象中 SAS 9.2(含)以後的版本直接支援匯出為 Excel 2007.....資料筆數可以到1,048,576




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)