2009-03-12 2 views
3

Ich wurde vor kurzem verantwortlich für die Aktualisierung einer VB6-Datenerfassungs-App, um die Möglichkeit, Excel-Berichte zu generieren und drucken sie über die App (beide müssen auf demselben Computer erfolgen) hinzugefügt. Normalerweise wäre das kein Problem, ich habe Excel-Berichte mit VB6 erstellt, bevor ich das Excel-Objekt verwende.Wie erstellen Sie ein Excel-Arbeitsblatt über VB6 ohne das Excel-Objekt?

Also ging ich voran und kodierte die Änderungen zusammen und präsentierte sie, und dann wurde mir gesagt, dass die Maschine, auf der dieses Programm installiert wird, keine vollständige Kopie von Excel darauf haben wird, und ich muss mit kommen eine andere Lösung.

Ich habe versucht, abgegrenzte Dateien (Komma getrennt oder Text), aber wenn diese Dateien mit Excel geöffnet werden sie nicht schön formatieren, dh wenn eine Zelle 20 Zeichen hat, wird die Hälfte der Zeichen aufgrund der festen Zellengröße abgeschnitten .

Ich habe noch ein paar Ideen:

1) Ich weiß, dass Open Office ein api hat. Kann diese API verwendet werden, um eine korrekt formatierte Excel-Datei zu erzeugen? Gibt es ein COM-Objekt, das ich verwenden kann?

2) Ich habe dieses Tool gefunden: http://www.carlosag.net/Tools/ExcelXmlWriter/ Es wurde jedoch in VB.NET geschrieben. Kann ich dieses Tool noch in VB6 verwenden?

Ich bin wirklich ratlos und weiß nicht, in welche Richtung ich als nächstes gehen soll. Hat jemand irgendwelche Ideen bezüglich der obigen Utile? Ich bin auch offen für andere Vorschläge/bessere Methoden. Alles, was mir helfen würde, diese Aufgabe zu erfüllen, wäre willkommen!

HINWEIS: Die Excel-Version, die diese Berichte anzeigen verwendet wird, ist Excel 2007

Antwort

-1

fand ich eine Lösung:

ich eine DLL gefunden, die verwendet werden können, um Excel-Tabellen zu erstellen und drucken. Ich denke, es ist das gleiche wie der XML-Writer, aber für VB6.

+0

Wo haben Sie diese DLL gefunden? Bitte teile die Lösung und poste einen Link dazu. –

1

Sie Dateien als HTML Excel speichern. In einer Web-App schrieb ich, dass die Daten als Excel exportieren musste, habe ich nur eine HTML-Datei wie die Excel-Exporte erstellt. Dann habe ich es als application/vnd.ms-excel gedient. Excel öffnet es gut. Sie könnten wahrscheinlich etwas Ähnliches tun.

Sie können auch eine Bibliothek finden, wie die, die Sie verknüpft haben, die das neue Office-Dateiformat direkt schreibt, da ich denke, dass sie Derivate von XML sind.

+0

+1. Excel ist ziemlich gut darin, eine alte HTML-Datei zu öffnen - ich denke, es ist eine Funktion für das manuelle "Screen Scraping". Erstellen Sie einfach eine Vanilla-HTML-Datei, wobei Sie gegebenenfalls Tabellen verwenden. Sollte gut funktionieren. – MarkJ

+0

Wie öffne ich die Datei, um sie zu drucken? Müsste es nicht in einem Browser geöffnet werden, um die HTML-Formatierung zu erhalten? Gibt es eine Möglichkeit, einen Browser mit VB6 zu öffnen (oder einzubetten), die Seite zu drucken und den Browser zu schließen? All dies muss ohne Eingabeaufforderungen oder Warnungen erfolgen. – darudude

+0

Sie können Internet Explorer über seine COM-Objektschnittstelle steuern. Wie das http://www.dailydoseofexcel.com/archives/2004/09/22/automation-internet-explorer/ – MarkJ

0

Wenn Sie bereit sind, mit der Installation der .NET-Laufzeitumgebung zu leben, können Sie die Bibliothek in Option # 2 mit einer .NET-Klasse für COM bereitstellen. Die Klasse übergibt nur Aufrufe an ExcelXMLwriter.

Die Alternative ist, den XML-Standard zu studieren und Ihren eigenen Schreiber zu schreiben, aber das ist vermutlich für das Projekt übertrieben.

Wie für OpenOffice werfen Sie einen Blick here. Vor allem der VBA-Abschnitt dieser Seite here. Es scheint eine COM-Komponente zu geben, die Sie verwenden können.

+0

Wow nie zuvor davon gehört. Von dem, was ich gerade lese, muss ich VB .NET installieren und die DLL ändern, um eine Schnittstelle zu erstellen. Ich muss dann eine COM-Bibliothek generieren, um die DLL aufzurufen. Ist das alles richtig? Kann es in Visual Studio 2005 Express gemacht werden? – darudude

+0

Es kann mit Befehlszeilen-Tools aus dem .NET-SDK getan werden, also würde ich denke, VS Express kann es auch tun. –

+0

Ja, Sie können Com-DLLs über VB Express erstellen. Aber Sie müssen möglicherweise die Befehlszeile aufrufen, wenn Sie die erweiterten Optionen verwenden müssen. –

1

Erstellen Sie die CSV-Datei wie gewohnt.

Lassen Sie Ihre Desktop-Anwendung die Formatierung auf dem Computer vornehmen, auf der XLS-Dateien verfügbar sind, bevor sie gedruckt wird.

+0

+1 Sie können Excel in der üblichen Weise von einer EXE auf Ihren Maschinen mit Excel bearbeiten. Oder Sie könnten ein XLS mit einem Makro verteilen. – MarkJ

4

Schauen wir uns diese beiden Anforderungen einen Blick:

die Fähigkeit hinzufügen Excel-Berichte zu generieren und sie über die App drucken.

und

die Maschine, auf der dieses Programm [sic] isntalled wird nicht eine vollständige Kopie der Excel

haben Wenn ich dich nicht falsch verstehen, zu denen scheinen zu sein sich gegenseitig ausschließen. Wenn Sie meinen, dass Sie die Berichte nur auf einem Computer erstellen und diese an anderer Stelle angezeigt und gedruckt werden, können Sie versuchen, SpreadSheetML zu verwenden.

Seien Sie vorsichtig, wenn Sie weitere Informationen über SpreadsheetML googeln: Es gibt einen viele von Fehlinformationen gibt, die für Excel verwendet in Office SpreadsheetML mit dem neuen XML-Format verwirrt weit zurück wie OfficeXP und sogar in einem 2007 SpreadsheetML arbeitet begrenzter Sinn in Office 2000.

+0

Dies scheint eine ziemlich einfache Lösung zu sein. Gibt es eine einfache Möglichkeit, die XML-Daten zu generieren? Der einzige Weg, an den ich jetzt denken könnte, würde im Wesentlichen eine Textdatei mit XML-Tags erstellen und mit einer XML-Erweiterung speichern. – darudude

+0

Ich weiß nicht, welche XML-Unterstützung, wenn eine in vb6 eingebaut ist, aber selbst wenn Sie als einfachen Text behandeln, ist es wahrscheinlich immer noch besser als durch OpenOffice oder Aufruf von .NET von vb6. –

+0

K Ich habe Ihre Lösung nicht gut durchgelesen. "Wenn Sie meinen, dass Sie die Berichte nur auf einer Maschine erstellen und diese dann an anderer Stelle angezeigt und gedruckt werden", muss die Maschine, die die Berichte erstellen muss, ebenfalls gedruckt werden. Die Berichte sollen in einem Excel-kompatiblen Format archiviert werden. – darudude

0

Es ist möglich, eine Excel-Arbeitsmappe auf einem Computer ohne installierte Excel ** zu erstellen, indem Sie eine Jet-Verbindung - eine beliebige Jet-Verbindung - zum Ausführen einer SQL-DML "make table query" oder CREATE TABLE verwenden SQL DLL, wo die fragliche Tabelle eine Excel-Datei ist, z betrachten diese VBA-Code:

Dim cat 
Set cat = CreateObject("ADOX.Catalog") 
With cat 

    ' Create a new Jet .mdb 
    .Create _ 
     "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
     "Data Source=" & _ 
     Environ$("temp") & "\DropMe.mdb" 
    ' Use .mdb's Jet connection to create an Excel table 
    ' (will create a new workbook to contain it) 
    .ActiveConnection.Execute _ 
    "CREATE TABLE" & _ 
    " [Excel 8.0;HDR=NO;Database=C:\db.xls;].[Sheet1]" & _ 
    " (col FLOAT);" 
End With 

Jet eine veraltete Windows-Komponente ist, die allgegenwärtige auf Pre-Vista Windows-Rechnern ist und bleibt ein kostenloser Download von MS über MDAC.

Das heißt, "um sie über die [Excel] App zu drucken" benötigen Sie eindeutig die Excel-App!

** Ich denke es ist möglich: Ich kann keine Maschine ohne Excel finden, auf der ich testen kann!

+0

MDAC enthält nicht mehr Jet, es ist ein separater Download. Auf unterstützten Rechnern (Win2K bis Win7 Beta, wenn Sie das "unterstützt" nennen) Jet 4.0 ist sowieso ein Teil des Betriebssystems. Ja, Jet kann zum Erstellen von Excel-Arbeitsmappen verwendet werden, aber es kann keine Zellen oder Spalten formatieren. – Bob

+0

MDAC 2.5 enthält Jet und MDAC 2.5 kann noch heruntergeladen werden, das ist, was ich meinte :) – onedaywhen

0

Erstellen einer SpreadsheetML-Datei aus VB6 sollte sehr einfach sein Es ist nur eine Textdatei mit einem bestimmten Geschmack von XML. Ich glaube, Sie können alle Dokumente für SpreadsheetML und WordML von MSDN erhalten.

Ich produziere derzeit rund 60 verschiedene benutzerdefinierte Berichte von einer vb.net-Anwendung mit SpreadsheetML. Es gibt mindestens ein potenzielles Problem aufgrund der Änderungen der Dateierweiterungen und der Dokumentsicherheit, die in Excel 2007 implementiert werden. Wenn Sie eine SpreadsheetML-basierte Excel-Datei erstellen und die Erweiterung .xls verwenden, wird sie 2003 problemlos geöffnet. Excel 2007 wird angezeigt Dialog informiert Sie darüber, dass die Dateierweiterung nicht mit dem Dateiinhalt übereinstimmt. Es wird geöffnet und zeigt die Datei nach dem Warndialog korrekt an. Wenn Sie die Erweiterung für das SpreadsheetML-Dokument in ".xml" ändern, wird Excel 2007 ohne Beanstandung geöffnet. Ihre xml-basierten Tabellenkalkulationen werden jedoch möglicherweise auf Computern mit Excel 2003 im Internet Explorer geöffnet.

+0

Ihnen ist bewusst, dass hier bereits ein Benutzer "Ken White" ist, oder? Ich bin schon ein oder zwei Monate hier. Vielleicht möchten Sie etwas anderes verwenden, um Verwirrung zu vermeiden (oder die Schuld für etwas zu bekommen, was Sie nicht gesagt haben). –

0

Ich benutze NPOI Es spielt keine Excel-Bibliothek verwendet und gibt Ausgabe in Excel 2003-Format

0

Ich würde auch mit der CSV-Option gehen. Erfordert keine DLL oder andere Art von Objekt. Ein Vorbehalt ist sehr vorsichtig mit der Formatierung, die Ihre Zahlen verwenden, da ein Wert von 1.024,00 zwei Spalten erstellen und die gesamte Arbeitsmappe schleusen würde. es würde als etwas wie Format formatiert sein (Nummernfeld, "#########. # 0")

Verwandte Themen