2009-08-01 13 views
2

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.

+0

Schnellste =? Ausführungsgeschwindigkeit oder Codierungszeit/Aufwand? –

Antwort

3

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.

3

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.

+0

Während es eine Excel-Tabelle produziert seine immer noch eine HTML-Tabelle mit Excel geöffnet –

+0

@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

2

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 
+0

Nicht VBA, VB6 –

+0

Ah. Ich habe vergessen, dass Referenzen in einem anderen Menü in VB6 leben, das ich nur auf einer (einsamen, alten) Maschine installiert habe. –

1

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.