[C#] Excel-file uitlezen

Pagina: 1
Acties:
  • 162 views sinds 30-01-2008
  • Reageer

  • maikel
  • Registratie: Januari 2001
  • Laatst online: 13-02 08:57
Ik heb een import-functie geschreven, die vanuit een Excel-bestand alle data van een personeelslijst inlees in een dataset. Dit ging tot op heden altijd goed, maar nu heb ik een bestand waarbij ik een error krijg.

Ik open de file dmv een OleDbConnection en haal dan het schema op van de tabellen. Vervolgens loop ik hier doorheen en haal dmv een 'select *' alle data op uit de tabellen.
Normaal gesproken is dit 1 tabel: Personeelslijst. Maar in dit geval zag ik tijdens het debuggen dat er volgens het schema twee tabellen in het bestand zitten: 'Personeelslijst$' en 'Personeelslijst$_'. Vervolgens krijg ik een melding dat deze laatste niet bestaat.

Wanneer ik het bestand in Excel open, zie ik inderdaad ook maar 1 sheet: 'Personeelslijst'. Mijn vraag is dus het het komt dat het schema een tweede tabel ziet en wat ik er aan kan doen om deze te verwijderen of in de code dit kan afvangen.
Het is een generieke module, dus zomaar de tweede tabel negeren is geen optie.

C#:
1
2
3
4
5
6
7
8
9
10
11
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties=\"Excel 8.0;HDR=YES;\"");
conn.Open();
DataTable table = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[]{null, null, null, "TABLE"});
foreach (DataRow row in table.Rows)
{
    string tableName            = row["TABLE_NAME"].ToString();
    OleDbDataAdapter adapter    = new OleDbDataAdapter("SELECT * FROM [" + tableName + "]", conn);
    DataTable sheetTable        = new DataTable(name);
    adapter.Fill(sheetTable);
}
conn.Close();

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Je leest niet de sheets, je geeft namen aan een reeks kolommen, die worden dan als tabellen gezien en kan je ook queries op uit voeren.

In excel: Invoegen -> Naam -> Definieren
Waarschijnlijk staan er daar 2.

  • maikel
  • Registratie: Januari 2001
  • Laatst online: 13-02 08:57
Gert schreef op woensdag 10 mei 2006 @ 14:14:
Je leest niet de sheets, je geeft namen aan een reeks kolommen, die worden dan als tabellen gezien en kan je ook queries op uit voeren.

In excel: Invoegen -> Naam -> Definieren
Waarschijnlijk staan er daar 2.
Het gaat hier wel om de sheets. De sheets komen in code terug als verschillende tabellen. De kolomnamen komen ook terug als kolomnamen in deze tabellen.

Daarbij heb ik in de kolomnamen nergens de naam 'Personeelslijst' staan. Deze naam komt alleen voor als naam van een sheet.

  • Vedett.
  • Registratie: November 2005
  • Laatst online: 21-02 17:46
Je kan wel de sheet uitlezen! Maar hoe weet ik niet meer. Even googelen zou ik zeggen.

Heb het ooit wel gedaan bij een excelbestand waar ik niets aan kon wijzigen, dus het moet wel lukken. Wat bij mij niet lukte, was om ranges te selecteren. Het was de volledige sheet, of niets.

  • maikel
  • Registratie: Januari 2001
  • Laatst online: 13-02 08:57
Vedett. schreef op woensdag 10 mei 2006 @ 14:19:
Je kan wel de sheet uitlezen! Maar hoe weet ik niet meer. Even googelen zou ik zeggen.

Heb het ooit wel gedaan bij een excelbestand waar ik niets aan kon wijzigen, dus het moet wel lukken. Wat bij mij niet lukte, was om ranges te selecteren. Het was de volledige sheet, of niets.
Het uitlezen lukt ook allemaal wel, maar het probleem is nu dat ie 'ineens' een sheet ziet die niet bestaat!
En die sheet heeft dezelfde naam als de wel-bestaande sheet, maar dan met een underscore erachter.