CSV_tools.xla

CSV_tools.xla

Wie kann ich ein Blatt, eine Tabelle oder eine Auswahl in ein anderes Dateiformat exportierenohne das aktuell aktive Dokument zu ändern?

Unsere primäre Datenverarbeitungsumgebung ist Excel, wo wir Formatierungen und Formeln in großem Umfang verwenden, um die gewünschten Ergebnisse zu erzielen. Die Ergebnisse werden dann gespeichert, um .CSVdie Interoperabilität mit anderen Programmen zu gewährleisten.

Wenn „Datei >>Speichern als>> Speichern unter >> CSV" wird verwendet die .csv Datei wird erstelltUndDas aktive Dokument wird in geändert saved_file.csv. Es gibt einige Warnungen, dass mit diesem neuen Format Funktionalität und Formatierung verloren gehen, ansonsten bleibt die Benutzeroberfläche jedoch unverändert. Es gibt Fett- und Kursivschrift, verschiedene Schriftarten und -größen, Hintergrundzellenfüllungen, definierte Tabellenbereiche und so weiter. Alle Formeln in den Zellen bleiben intakt.

Das ist eine Katastrophe, die nur darauf wartet, zu passieren. Der Benutzer macht sich wieder an die Arbeit, täuscht sich in dem Glauben, alles sei normal, vergisst bald, dass das aktuelle Format keine Zauberei unterstützt, und macht mit den wichtigen Dingen weiter. Es ist Mittagszeit, er schließt Excel, klickt zweimal auf „Ja“ bei nervigen Dialogen, die er nicht liest, weil er sie ständig sieht, und geht zur Tür hinaus. ... Nach dem Mittagessen kommt der Benutzer zurück und stellt fest, dass die ganze Arbeit zwischen dem ersten „Speichern unter“ und „Beenden“ umsonst war.

"Datei >>Export" ist leider nur ein weiterer Navigationspfad zu „Speichern unter“, wodurch auch das aktive Dokument in „irgendeine_Datei.csv“ geändert wird.

Wir müssen einige Daten in einen anderen Dateityp exportieren und das aktive Dokument „our-real-data.xlsx“ behalten.

Wie kann dies gemacht werden? Und zum Menü oder Menüband hinzugefügt werden, um es mit einem Klick auszuführen?

Wie kann es mit allen in der Organisation geteilt werden? (ohne einzelne Benutzer aufzufordern, einen VBA-Editor usw. zu öffnen)

Antwort1

Wir müssen einige Daten in einen anderen Dateityp exportieren und das aktive Dokument „our-real-data.xlsx“ behalten.

CSV_tools.xla

Ich habe ein schnelles VBA-Add-In zusammengestellt, das als CSV exportiert, da Sie es erwähnt haben. Ich habe versucht, so wenig Code wie möglich zu verwenden, damit neue Benutzer es leichter verstehen können.

Was macht es

  • Das Add-In fragt, wo die CSV-Datei gespeichert werden soll. Der Standardordner ist der Ordner, in dem die XLS-Datei gespeichert ist.
  • Das Add-In erkennt automatisch, ob gemäß Ihren regionalen Systemeinstellungen ein Komma oder ein Semikolon als Trennzeichen verwendet werden soll.
  • Alle Werte des aktuell aktiven Excel-Tabellenblatts werden in eine neue CSV-Datei exportiert, die nach der XLS-Datei benannt wird
  • Das bestehende XLS wird in keiner Weise angetastet

Installation

  1. Laden Sie dieAdd-Inund speichern Sie es unterC:\Users\%USERNAME%\AppData\Roaming\Microsoft\AddIns
  2. Öffnen Sie Excel und aktivieren Sie es unter
    • Excel 2003: Menüleiste → Extras → Add-Ins
    • Excel 2007: Excel-Optionen → Add-Ins → Gehe zu
    • Excel 2010-13: Registerkarte Datei → Optionen → Add-Ins → Gehe zu
  3. Starten Sie Excel neu und sehen Sie sich Ihre Menüleiste an

    Bildbeschreibung hier eingeben

VBA Code

Function ExportCSV()

    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    On Error Resume Next
    ChDrive (ActiveWorkbook.Path)
    ChDir (ActiveWorkbook.Path)
    strName = fso.GetBaseName(ActiveWorkbook.Name)
    On Error GoTo 0

    strFilename = Application.GetSaveAsFilename(strName, "CSV Files,*.csv", 1)
    delimiter = Application.International(xlListSeparator)
    If Not strFilename = False Then

        Open strFilename For Append As #1

        For Each rngRow In ActiveSheet.UsedRange.Rows
            arr2D = rngRow
            arr1D = Application.Index(arr2D, 1, 0)
            strRow = Join(arr1D, delimiter)
            Print #1, strRow
        Next

        Close #1
    End If

End Function

Automatische Updates für verschiedene Benutzer

Sobald jeder Benutzer das Add-In in seinem Excel aktiviert hat (kann nicht automatisiert werden), können Sie die neue .xlaDateiversion über eine Netzwerkfreigabe, Robocopy oder ähnliche Tools kopieren. Dies sollte jedoch eine separate Frage sein, da es zu viele verschiedene Möglichkeiten gibt, das Problem zu lösen.


Für die VBA-Freaks ist der interessanteste Teil

arr2D = rngRow
arr1D = Application.Index(arr2D, 1, 0)
strRow = Join(arr1D, delimiter)

Dadurch wird ein Bereich (in unserem Fall eine einzelne Zeile) in ein 2D-Array, dann in ein 1D-Array und schließlich mithilfe der Funktion Join() in einen einzelnen String umgewandelt.

Antwort2

Bringen Sie dem Benutzer bei, eine Kopie dieser Daten zu öffnen.

Wenn Sie ein Office-Dokument auswählen, können Sie mit der rechten Maustaste auf das Symbol klicken und auf Neu klicken. Dadurch wird ein neues Dokument/Blatt/eine neue Präsentation basierend auf dem Original erstellt. Die Benutzer können daraus exportieren, indem sie einfach auf Speichern unter klicken.

Ich hoffe jedoch, dass Sie auch über gute Backups verfügen, falls Sie solche Bedenken haben ...

verwandte Informationen