我们在.csv文件中有超过65,536行要导出(写入)的数据。但Excel(CSV)仅支持65,536。 Excel支持多个工作簿,因此我们可以在多个工作簿中编写数据。但CSV也不支持此功能。有没有其他方法可以做到这一点。有人可以帮忙吗?
答案 0 :(得分:3)
如果可能,您可以将数据写入多个CSV文件。 CSV基本上只是一个文本文件,所以没有像多张表等的东西。
也许您可以使用Excel文件(xls)和多个工作表。根据您使用的语言(例如,Apache POI用于Java),存在用于编写Excel文件的库。
答案 1 :(得分:0)
如果您要定位Excel,则有许多库可帮助生成CSV格式的xls文件。其中CarlosAg.ExcelXmlWriter.dll易于使用。
答案 2 :(得分: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