ich für Vorschläge zu dieser speziellen Frage stünde auf:Generieren von Excel-Dateien mit VB6
Was ist der schnellste Weg, Excel-Dateien (XLS regelmäßige, nicht die XLSX sind) in Visual Basic 6 (VB6) zu erzeugen?
Vielen Dank.
ich für Vorschläge zu dieser speziellen Frage stünde auf:Generieren von Excel-Dateien mit VB6
Was ist der schnellste Weg, Excel-Dateien (XLS regelmäßige, nicht die XLSX sind) in Visual Basic 6 (VB6) zu erzeugen?
Vielen Dank.
Die einfachste Möglichkeit besteht darin, in Ihrem Projekt eine Referenz auf das Excel-COM-Objekt festzulegen und alle Daten programmgesteuert in ein Blatt einzufügen.
Excel Lage war, HTML, da Excel zu lesen 2000.
Die einfachste Weg ist, HTML-Tabellen zu schreiben und sie mit der Erweiterung .xls speichern oder wenn es sich um eine Web-App löschen ist die Antwortpuffer, stellen die Antworttyp auf "application/vnd.ms-excel" und schreiben Sie die Tabelle mit nichts anderem.
Kopieren Sie die folgenden Elemente in den Editor und speichern Sie sie mit der Erweiterung .xls und öffnen Sie sie.
<table>
<tr><th>Color</th><th>Shape</th></tr>
<tr><td>Blue</td><td>Square</td></tr>
</table>
Haftungsausschluss:
ich diese Methode nicht empfehlen, weil es wahrscheinlich mit Excel nur kompatibel ist, aber es ist der einfachste Weg, den ich kenne.
Während es eine Excel-Tabelle produziert seine immer noch eine HTML-Tabelle mit Excel geöffnet –
@Ori - Dies ist jedoch wahr, wenn gespeichert Excel ist freundlich genug, es in seinem nativen Format zu speichern. Ich schlage nicht vor, dass dies die beste Methode ist, aber in einer Situation, in der Excel nicht verfügbar ist, funktioniert es gut. – MyItchyChin
Legen Sie eine Referenz (im Menü Extras in VBA, Projekt in VB6) auf die Excel-Objektbibliothek (kann nicht den genauen Namen merken, aber es wird mit "Microsoft" beginnen und "Excel" irgendwo in der Name).
Dann etwas wie folgt aus:
Public Sub BuildAndSaveWorkbook
With New Excel.Workbook
' do all the stuff to create the content, then'
.SaveAs Filename:="WhateverYouWantToCallIt.xls", FileFormat:=xlExcel8
End With
End Sub
Nicht VBA, VB6 –
Ah. Ich habe vergessen, dass Referenzen in einem anderen Menü in VB6 leben, das ich nur auf einer (einsamen, alten) Maschine installiert habe. –
Der schnellste Weg, um eine XLS-Datei zu erstellen, ist von Jet ISAM-Treiber für Excel. Hier ist ein Beispiel, wie es mit ADO und ADOX zu tun:
' References:
' Microsoft ActiveX Data Objects 2.8 Library
' Microsoft ADO Ext. 2.8 for DDL and Security
Option Explicit
Private Sub Command1_Click()
Dim rs As ADODB.Recordset
Set rs = CreateRecordset(_
"ID", adDouble, _
"Name", adVarWChar, 200, _
"Value", adDouble, _
"Memo", adLongVarWChar)
rs.AddNew Array("ID", "Name", "Value", "Memo"), _
Array(1, "test", 5.1, "long long text here")
rs.AddNew Array("ID", "Name", "Value"), _
Array(1, "proba", 15.678)
AppendExcelSheet rs, App.Path & "\test.xls", "My Data", True
AppendExcelSheet rs, App.Path & "\test.xls", "More Data"
End Sub
Private Function CreateRecordset(ParamArray FldDesc()) As ADODB.Recordset
Dim lIdx As Long
Set CreateRecordset = New ADODB.Recordset
With CreateRecordset.Fields
Do While lIdx < UBound(FldDesc)
Select Case FldDesc(lIdx + 1)
Case adDouble, adDate, adCurrency, adBoolean
.Append FldDesc(lIdx), FldDesc(lIdx + 1), , adFldIsNullable
lIdx = lIdx + 2
Case adVarWChar
.Append FldDesc(lIdx), FldDesc(lIdx + 1), FldDesc(lIdx + 2), adFldIsNullable
lIdx = lIdx + 3
Case adLongVarWChar
.Append FldDesc(lIdx), FldDesc(lIdx + 1), -1, adFldIsNullable
lIdx = lIdx + 2
Case Else
Err.Raise vbObjectError, , "Not support Excel data type!"
End Select
Loop
End With
CreateRecordset.Open
End Function
Private Function AppendExcelSheet(_
rsSrc As Recordset, _
sXlsFile As String, _
Optional ByVal sSheetName As String, _
Optional ByVal bCreateNew As Boolean) As Boolean
Dim sConnStr As String
Dim oTbl As ADOX.Table
Dim oCol As ADOX.Column
Dim oFld As ADODB.Field
Dim rsDst As ADODB.Recordset
'--- init local vars
sConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & sXlsFile & ";Extended Properties=""Excel 8.0;Read Only=0"""
If LenB(sSheetName) = 0 Then
sSheetName = "Sheet1"
End If
'--- cleanup previous file
If bCreateNew Then
On Error Resume Next
SetAttr sXlsFile, vbArchive
Kill sXlsFile
On Error GoTo 0
End If
'--- create/open workbook and append worksheet
With New ADOX.Catalog
.ActiveConnection = sConnStr
Set oTbl = New ADOX.Table
oTbl.Name = sSheetName
For Each oFld In rsSrc.Fields
Set oCol = New ADOX.Column
With oCol
.Name = oFld.Name
.Type = oFld.Type
End With
oTbl.Columns.Append oCol
Next
.Tables.Append oTbl
End With
'--- copy data to range (named after worksheet)
If rsSrc.RecordCount > 0 Then
Set rsDst = New ADODB.Recordset
rsDst.Open "[" & sSheetName & "]", sConnStr, adOpenDynamic, adLockOptimistic
rsSrc.MoveFirst
Do While Not rsSrc.EOF
rsDst.AddNew
For Each oFld In rsSrc.Fields
rsDst.Fields(oFld.Name).Value = oFld.Value
Next
rsDst.Update
rsSrc.MoveNext
Loop
End If
End Function
Beachten Sie die Read Only=0
erweiterte Eigenschaft auf der Verbindungszeichenfolge.
Schnellste =? Ausführungsgeschwindigkeit oder Codierungszeit/Aufwand? –