Automatisieren des Excel-Textimport-Assistenten?

20063
Dave Mackey

Ich erhalte gelegentlich Dateien in einem Format mit fester Breite. Ich muss sie in Excel importieren, aber die Spalten werden von Excel nicht perfekt übernommen. Ich kann das jedes Mal manuell mit dem Textimport-Assistenten durchführen, aber ich frage mich, ob es eine Möglichkeit gibt, eine "Textimportvorlage" oder etwas Ähnliches zu erstellen - da diese Dateien immer dasselbe Format haben.

3

3 Antworten auf die Frage

3
dkusleika

If you record a macro (Tools - Macro - Record New Macro) while you open the file, you will get the parameters you need to use the OpenText method. Here's an example

Workbooks.OpenText Filename:= _ "C:\Documents and Settings\dick\My Documents\actsynclog.txt", Origin:=437, _ StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array(Array(0, 1), Array(8, _ 1), Array(31, 1), Array(41, 1), Array(57, 1), Array(77, 1), Array(80, 1), Array(82, 1), _ Array(84, 1), Array(86, 1)), TrailingMinusNumbers:=True 

The FieldInfo argument is the one you care about. It's an array of 2d arrays. The first element is the column and the second is the data type. This example splits the text file in the following columns: 0, 8, 31, 41, 57, 77, 80, 82, 84, and 86.

With that you, you can write a macro to open the text file. See the GetOpenFileName method of the Application object for how to select which file to open.

1
Weaver

In Excel ist es möglich, Textimporteinstellungen (als "Vorlage") zu speichern und später mit einer beliebigen Textdatei wiederzuverwenden. Ein Blogpost von Excel MVP, Jan Karel Pieterse, beschreibt dies ausführlich: http://blogs.office.com/2010/06/10/importing-text-files-in-an-excel-sheet/

Die "Textimportvorlage" wird automatisch erstellt, wenn Sie mit dem Textimport-Assistenten fertig sind. Stellen Sie sicher, dass Sie Ihre Arbeitsmappe speichern, um die "Vorlage" beizubehalten.

Um es mit einer anderen (oder derselben) Textdatei wiederzuverwenden:

  1. Klicken Sie auf eine beliebige Zelle in Ihrem Arbeitsblatt, die Daten eines vorherigen Imports enthält.
    • Excel 2007/2010: Klicken Sie auf Daten -> Alle aktualisieren -> Aktualisieren
    • Excel 2003 und älter: Klicken Sie auf Daten -> Daten aktualisieren

Wenn Sie diese "Vorlage" verwenden, um immer eine Datei mit demselben Namen und Speicherort zu importieren, können Sie die "Vorlage" so anpassen, dass Sie von Excel nicht bei jedem Klicken auf die Schaltfläche Aktualisieren zur Eingabe eines Dateinamens aufgefordert werden.

Klicken Sie während des Textimports auf Eigenschaften ... im Dialogfeld Daten importieren, und deaktivieren Sie im Dialogfeld Eigenschaften von Externer Datenbereich die Option Aufforderung zur Eingabe des Dateinamens. Sie können dies auch später im Dialogfeld Verbindungseigenschaften bearbeiten.

Ich würde Screenshots posten, aber "ich brauche mindestens 10 Reputation, um Bilder zu veröffentlichen."

0
nik

If you are fine with some Perl programming,
there is a Spreadsheet module which supports WriteExcel.

I have used this earlier to do the inverse of what you want -- convert an Excel file to CSV format,
I used ReadExcel for that.

Take a look at the examples in the WriteExcel link here and other references for XLS-to-CSV on that question, you might find something that works for you between the two.