it-swarm.com.de

Wie führe ich eine SQL-Abfrage für eine Excel-Tabelle aus?

Ich versuche, eine Untertabelle aus einer anderen Tabelle aller nach A-Z sortierten Nachname-Felder zu erstellen, die ein Telefonnummernfeld haben, das nicht Null ist. Ich könnte das mit SQL recht einfach machen, aber ich habe keine Ahnung, wie ich eine SQL-Abfrage in Excel ausführen soll. Ich bin versucht, die Daten in postgresql zu importieren und sie dort abzufragen, aber das scheint etwas übertrieben. 

Für das, was ich versuche zu tun, würde die SQL-Abfrage SELECT lastname, firstname, phonenumber WHERE phonenumber IS NOT NULL ORDER BY lastname den Trick tun. Es scheint zu einfach zu sein, als wäre es etwas, was Excel nativ nicht tun kann. Wie kann ich eine solche SQL-Abfrage in Excel ausführen?

63
Vap0r

Es gibt viele Möglichkeiten, dies zu erreichen, was andere bereits vorgeschlagen haben. Folgen Sie dem Abschnitt "Excel-Daten über SQL-Spur abrufen". Hier einige Hinweise.

  1. Excel verfügt über den "Datenverbindungsassistenten", mit dem Sie aus einer anderen Datenquelle oder sogar innerhalb derselben Excel-Datei importieren oder verknüpfen können.

  2. Als Teil von Microsoft Office (und Betriebssystemen) sind zwei Anbieter von Interesse: das alte "Microsoft.Jet.OLEDB" und das neueste "Microsoft.ACE.OLEDB". Achten Sie darauf, wenn Sie eine Verbindung einrichten (z. B. mit dem Datenverbindungsassistenten).

  3. Sobald eine Verbindung zu einer Excel-Arbeitsmappe hergestellt wurde, entspricht ein Arbeitsblatt oder Bereich einer Tabelle oder Ansicht. Der Tabellenname eines Arbeitsblatts ist der Name des Arbeitsblatts, an das ein Dollarzeichen ("$") angehängt und von eckigen Klammern ("[" und "]") umgeben ist. von einem Bereich ist es einfach der Name des Bereichs. Um einen unbenannten Zellbereich als Ihre Recordsource festzulegen, hängen Sie die standardmäßige Excel-Zeilen-/Spaltennotation am Ende des Blattnamens in den eckigen Klammern an.

  4. Das native SQL wird (mehr oder weniger) das SQL von Microsoft Access sein. (Früher hieß es JET SQL; Access SQL hat sich jedoch weiterentwickelt, und ich glaube, JET ist alter Techniker veraltet.)

  5. Beispiel beim Lesen eines Arbeitsblatts: SELECT * FROM [Sheet1 $]

  6. Beispiel beim Lesen eines Bereichs: SELECT * FROM MyRange

  7. Beispiel: Lesen eines unbenannten Zellbereichs: SELECT * FROM [Sheet1 $ A1: B10]

  8. Es gibt viele, viele Bücher und Websites, die Ihnen beim Durcharbeiten der Einzelheiten helfen.

=== Weitere Hinweise ===

Standardmäßig wird davon ausgegangen, dass die erste Zeile Ihrer Excel-Datenquelle Spaltenüberschriften enthält, die als Feldnamen verwendet werden können. Ist dies nicht der Fall, müssen Sie diese Einstellung deaktivieren, oder Ihre erste Datenzeile "verschwindet", um als Feldnamen verwendet zu werden. Dies geschieht durch Hinzufügen der optionalen Einstellung HDR = zu den erweiterten Eigenschaften der Verbindungszeichenfolge. Der Standardwert, der nicht angegeben werden muss, lautet HDR = Yes. Wenn Sie keine Spaltenüberschriften haben, müssen Sie HDR = No angeben. Der Anbieter nennt Ihre Felder F1, F2 usw.

Vorsicht beim Angeben von Arbeitsblättern: Der Anbieter geht davon aus, dass Ihre Datentabelle mit der obersten, ganz linken und nicht leeren Zelle des angegebenen Arbeitsblatts beginnt. Mit anderen Worten, Ihre Datentabelle kann problemlos in Zeile 3, Spalte C beginnen. Sie können jedoch nicht beispielsweise einen Worksheeet-Titel oberhalb und links neben den Daten in Zelle A1 eingeben.

Vorsicht beim Angeben von Bereichen: Wenn Sie ein Arbeitsblatt als Datensatzquelle angeben, fügt der Anbieter neue Datensätze unterhalb der vorhandenen Datensätze im Arbeitsblatt hinzu, sofern der Speicherplatz dies zulässt. Wenn Sie einen Bereich angeben (benannt oder unbenannt), fügt Jet auch neue Datensätze unterhalb der vorhandenen Datensätze im Bereich hinzu, sofern der Platz dies zulässt. Wenn Sie den ursprünglichen Bereich erneut abfragen, enthält das resultierende Recordset die neu hinzugefügten Datensätze nicht außerhalb des Bereichs.

Datentypen (Versuchenswert) für CREATE TABLE: Short, Long, Single, Double, Currency, DateTime, Bit, Byte, GUID, BigBinary, LongBinary, VarBinary, LongText, VarChar, Decimal.

Verbindung zu "old tech" Excel (Dateien mit der Erweiterung xls): Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyFolder\MyWorkbook.xls;Extended Properties=Excel 8.0;. Verwenden Sie den Excel 5.0-Quellendatenbanktyp für Microsoft Excel 5.0 und 7.0 (95) Arbeitsmappen, und verwenden Sie den Excel 8.0-Quelldatenbanktyp für Microsoft Excel 8.0 (97), 9.0 (2000) und 10.0 (2002) Arbeitsmappen.

Verbindung zu "neuestem" Excel (Dateien mit der Dateierweiterung xlsx): Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Excel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;"

Daten als Text behandeln: Die IMEX-Einstellung behandelt alle Daten als Text. Provider = Microsoft.ACE.OLEDB.12.0; Datenquelle = Excel2007file.xlsx; Erweiterte Eigenschaften = "Excel 12.0 Xml; HDR = YES; IMEX = 1";

(Weitere Details unter http://www.connectionstrings.com/Excel )

Weitere Informationen finden Sie unter http://msdn.Microsoft.com/en-US/library/ms141683(v=sql.90).aspx und unter http://support.Microsoft.com/kb/ 316934

Herstellen einer Verbindung zu Excel über ADODB über VBA unter http://support.Microsoft.com/kb/257819

Microsoft JET 4-Details unter http://support.Microsoft.com/kb/275561

49
rskar

Sie können dies nativ wie folgt tun:

  1. Wählen Sie die Tabelle aus und sortieren Sie sie mithilfe von Excel nach Nachname
  2. Erstellen Sie ein erweitertes Filterkriterium mit zwei Zeilen und einer Spalte, zum Beispiel in E1 und E2, wobei E1 leer ist und E2 die Formel =C6="" Enthält, wobei C6 die erste Datenzelle der Telefonnummernspalte ist.
  3. Wählen Sie die Tabelle aus und verwenden Sie den erweiterten Filter. Kopieren Sie in einen Bereich, verwenden Sie den Kriterienbereich in E1: E2 und geben Sie an, wohin die Ausgabe von Kopiert werden soll

Wenn Sie dies programmgesteuert ausführen möchten, sollten Sie den Makro-Recorder verwenden, um die oben genannten Schritte aufzuzeichnen und sich den Code anzusehen.

8

tl; dr; Excel führt all dies nativ aus - benutze Filter und oder Tabellen 

( http://office.Microsoft.com/de-de/Excel-help/filter-data-in-an-Excel-table-HA102840028.aspx )

Sie können Excel programmatisch über eine Oledb-Verbindung öffnen und SQL für die Tabellen im Arbeitsblatt ausführen.

Sie können jedoch alles, was Sie möchten, ohne Formeln, sondern nur mit Filtern.

  1. Klicken Sie irgendwo in die Daten, die Sie gerade betrachten
  2. Gehe zu Daten in der Multifunktionsleiste
  3. select "Filter" ist ungefähr in der Mitte und sieht aus wie ein Trichter
    • sie werden jetzt Pfeile auf der engen Handseite jeder Zelle in der ersten Zeile Ihres Tisches haben
  4. klicken Sie auf den Pfeil auf der Telefonnummer und deaktivieren Sie die Leerzeichen (letzte Option).
  5. klicken Sie auf den Pfeil auf dem Nachnamen und a-z-Reihenfolge auswählen (obere Option)

ein spiel herum .. einige zu beachten:

  1. sie können die gefilterten Zeilen auswählen und an anderer Stelle einfügen
  2. in der Statusleiste auf der linken Seite sehen Sie, wie viele Zeilen Sie erfüllen, und filtern Sie Kriterien aus der Gesamtzahl der Zeilen. (z. B. 308 von 313 gefundenen Datensätzen)
  3. sie können in Excel 2010 auf Stationen nach Farbe filtern
  4. Manchmal erstelle ich berechnete Spalten mit Statusangaben oder bereinigten Versionen von Daten, die Sie dann auch filtern oder nach diesen sortieren können. (z. B. wie die Formeln in den anderen Antworten)

Machen Sie es mit Filtern, es sei denn, Sie tun es oft oder Sie möchten den Import von Daten irgendwo oder etwas automatisieren. Aber der Vollständigkeit halber:

A c # -Option:

 OleDbConnection ExcelFile = new OleDbConnection( String.Format( "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;HDR=YES\"", filename));
 ExcelFile.Open();

ein praktischer Anfang ist ein Blick auf das Schema, da möglicherweise mehr vorhanden ist, als Sie denken:

List<String> excelSheets = new List<string>();

// Add the sheet name to the string array.
foreach (DataRow row in dt.Rows) {
    string temp = row["TABLE_NAME"].ToString();
    if (temp[temp.Length - 1] == '$') {
         excelSheets.Add(row["TABLE_NAME"].ToString());
    }
}

dann, wenn Sie ein Blatt abfragen möchten:

 OleDbDataAdapter da = new OleDbDataAdapter("select * from [" + sheet + "]", ExcelFile);
 dt = new DataTable();
  da.Fill(dt);

HINWEIS - Verwenden Sie Tabellen in Excel !:

Excel verfügt über eine "Tabellen" -Funktionalität, durch die Daten sich mehr wie eine Tabelle verhalten. Dies bietet Ihnen einige große Vorteile, lässt Sie jedoch nicht jede Art von Abfrage ausführen. 

http://office.Microsoft.com/de-de/Excel-help/overview-of-Excel-tables-HA010048546.aspx

Für tabellarische Daten in Excel ist dies meine Standardeinstellung. Als Erstes klicken Sie in die Daten und wählen dann "Format als Tabelle" aus dem Home-Bereich des Menübands. Dadurch können Sie standardmäßig filtern und sortieren. Außerdem können Sie auf die Tabelle und Felder nach Namen zugreifen (z. B. Tabelle [Feldname]). Dies ermöglicht auch Aggregatfunktionen für Spalten, z. max und durchschnittlich

5
user359135

Sie can verwenden SQL in Excel. Es ist nur gut versteckt . Sehen Sie dieses Tutorial:

http://smallbusiness.chron.com/use-sql-statements-ms-Excel-41193.html

3

Wenn Sie dies einmal tun müssen, folgen Sie einfach den Beschreibungen von Charles. Sie können dies jedoch auch mit Excel-Formeln und Hilfsspalten durchführen, falls Sie den Filter dynamisieren möchten.

Nehmen wir an, Ihre Daten befinden sich auf dem Datenblatt-Datenblatt und beginnen in Zeile 2 der folgenden Spalten:

  • A: Nachname
  • B: Vorname
  • C: Telefonnummer

Sie benötigen zwei Helfer-Spalten auf diesem Blatt.

  • D2: =if(A2 = "", 1, 0), dies ist die Filterspalte, die Ihrer Where-Bedingung entspricht
  • E2: =if(D2 <> 1, "", sumifs(D$2:D$1048576, A$2:A$1048576, "<"&A2) + sumifs(D$2:D2, A$2:A2, A2)), dies entspricht der Bestellung von

Kopieren Sie diese Formeln so weit wie möglich auf Ihre Daten.

Erstellen Sie auf dem Blatt, das Ihr Ergebnis anzeigen soll, die folgenden Spalten.

  • A: Eine Zahlenfolge, die mit 1 in Zeile 2 beginnt. Dies begrenzt die Gesamtzahl der Zeilen, die Sie erhalten können (Art wie ein Limit in der Folge).
  • B2: =match(A2, DataSheet!$E$2:$E$1048576, 0), dies ist die Zeile der entsprechenden Daten
  • C2: =iferror(index(DataSheet!A$2:A$1048576, $B2), ""), dies sind die tatsächlichen Daten oder leer, wenn keine Daten vorhanden sind

Kopieren Sie die Formeln in B2 und C2 und kopieren Sie die Spalten C bis D und E.

2
unique2

Wenn Sie SQL zum Kombinieren von Daten aus mehreren Excel-Tabellen oder aus mehreren Excel-Dateien ausführen möchten, können Sie den Cloud-Dienst namens Rockset verwenden. Rockset bietet Ihnen eine SQL-Schnittstelle, die Daten aus Excel, Pdf oder Txt/Xml/Json/CSV kombiniert.

1
dhruba

Ich kann vorschlagen, QueryStorm a try zu geben - es ist ein Plugin für Excel, das die Verwendung von SQL in Excel recht praktisch macht.

Es ist auch Freemium. Wenn Sie sich nicht für Autovervollständigung, Fehlerquigglies usw. interessieren, können Sie es kostenlos nutzen. Einfach herunterladen und installieren, und Sie haben SQL-Unterstützung in Excel.

Haftungsausschluss: Ich bin der Autor.

0
anakic