2010-07-05 258 views
1

我們有超過65,536行的數據導出(寫入).csv文件。但Excel(CSV)僅支持65,536。 Excel支持多個工作簿,因此我們可以將數據寫入多個工作簿。但CSV也不支持此功能。有沒有其他的方式來做到這一點。任何人都可以幫忙嗎?將數據導出到CSV文件

+0

爲什麼不直接寫入電子表格呢? Microsoft.Office.Interop.Excel命名空間。 – 2010-07-05 12:36:33

回答

0

如果您的目標是Excel,有許多庫可以幫助生成CSV文件的xls文件。對他們來說是易於使用的CarlosAg.ExcelXmlWriter.dll

3

如果可能的話,您可以將數據寫入多個CSV文件。 CSV基本上只是一個文本文件,所以沒有像多張紙等東西。

也許你可以使用Excel文件(xls)和多張紙。根據您使用的語言,存在用於編寫Excel文件的庫(例如用於Java的Apache POI)。

0

下面最初是爲Excel2003編寫的,但是當我遷移到2007年時,COMDLG32不被支持,所以煩惱地你只是得到一個InputBox。我有一段時間沒有使用它,所以它可能需要一點修改,但希望指向正確的方向。

Sub OpenCSV_bysheet() 

'No COMDLG32.OCX 

    Dim fileNo As Integer 
    Dim tempRow, fileNm As String 
    Dim tempRowNo, x, y As Long 
    Dim CommaOnOff As Boolean 

    fileNm = InputBox("Please input Drive:\Path\Filename.csv", , CurDir & "\*.csv") 
    If fileNm = "" Then Exit Sub 
    For x = 1 To Len(fileNm) 
     If Mid(fileNm, x, 1) = "*" Or Mid(fileNm, x, 1) = "?" Then Exit Sub 
    Next x 

' UserForm1.CommonDialog1.CancelError = True 
' UserForm1.CommonDialog1.Flags = cdlOFNHideReadOnly 
' UserForm1.CommonDialog1.Filter = "Comma Separated Value files (*.csv)|*.csv|All Files (*.*)|*.*" 

    On Error GoTo errorTrap 
' UserForm1.CommonDialog1.ShowOpen 

' fileNm = UserForm1.CommonDialog1.Filename 

    fileNo = FreeFile 
    tempRowNo = 0 
    x = 0 
    y = 0 

    On Error Resume Next 
    Workbooks.Add (xlWBATWorksheet) 
    Application.ScreenUpdating = False 

    Open fileNm For Input As fileNo 
     Do While Not EOF(fileNo) 
      Line Input #fileNo, tempRow 

      If x Mod 65536 = 0 And x > 0 Then 
       Sheets.Add 
       x = 0 
      End If 
      x = x + 1 
      y = y + 1 

      ActiveCell.Cells(x, 1).Value = tempRow 

      ActiveCell.Cells(x, 1).TextToColumns Destination:=ActiveCell.Cells(x, 1), _ 
       DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _ 
       Tab:=False, Semicolon:=False, Comma:=True, Space:=False, Other:=False 

      Application.StatusBar = y 

     Loop 
    Close fileNo 

errorTrap: 
    Application.ScreenUpdating = False 
    Application.StatusBar = False 
End Sub