Avatar billede scarface335 Nybegynder
20. januar 2009 - 15:03 Der er 10 kommentarer og
1 løsning

Læsning af Excel ark fra C#

Hej.

Jeg har lavet et program der kan læse et excel ark og konvertere det til en semikolon separeret fil. Ark1 som jeg læser hedder i dette tilfælde arkiv, til dette bruger jeg kommandoerne

odbcCon = new System.Data.Odbc.OdbcConnection("providerName=System.Data.Odbc ; DSN=ExcelCon; ");
                       
                        odbcread = new System.Data.Odbc.OdbcDataAdapter("select * from [Arkiv$]", odbcCon);

Hvis man nu ikke kender navnet på det ark man skal læse eller navnet kan være forskelligt fra gang til gang, er der så en måde hvorpå man kan læse det første ark, eller spørge på hvad det hedder ?
Avatar billede aaberg Nybegynder
20. januar 2009 - 15:20 #1
Jeg ved ikke om der er en nem måde at gøre det på, ved at bruge Odbc. Men jeg kan fortælle dig, hvordan du gør det med OleDb.

OleDbConnection.GetOleDbSchemaTable() metoden, returnerer en DataTable instans, med information om alle tabeller (også kaldet Ark i Excel). For at teste det, puttede jeg en DataGridView ind på en form, og skrev følgende kode:

DataTable schemaTable = null;

using (OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\excelFil.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"))
{
    con.Open();
    schemaTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
}

this.dataGridView1.DataSource = schemaTable;
Avatar billede scarface335 Nybegynder
20. januar 2009 - 15:40 #2
Jeg vil ikke skrive om til oleDB, da jeg har testet med det for lang tid siden og bestemte at odbc var vejen frem, det er et ældre program jeg er ved at rette i, men prøver lige at se om jeg kan bruge noget ligende til ODBC, høre også gerne hvis andre har forslag til odbc
Avatar billede gonnemand Nybegynder
21. februar 2009 - 19:46 #3
Forstår ikke at du bruger database connections, når C# kan alt med excel. Begge er jo microsoft ;-)

Tjek -> http://msdn.microsoft.com/en-us/library/d2tx7z6d.aspx

Ved at bruge Microsoft.Office.Interop.Excel kan man få et ark ved:

sheets.get_Item(1);

eller

sheets.get_Item("ark_navn");

Tjek msdn linket, der er masser af C# til excel kode eksempler.
Avatar billede arne_v Ekspert
21. februar 2009 - 20:48 #4
Det eksempel du viser er jo det problem som spørger allerede har løst ikke det han spørger om.

Men jeg vil da tro at VSTO også har en måde at finde ud af hvor mange ark der og hvad de hedder.
Avatar billede gonnemand Nybegynder
21. februar 2009 - 23:29 #5
Jah okay, men vil alligevel poste en evt. løsning, ved at benytte
Microsoft.Office.Interop.Excel, så kan scarface335 skifte til det, hvis han lyster. Det er faktisk rigtig godt.
Jeg har selv prøvet et kommunikere med excel via en DB connection, og det synes jeg var lidt træls.

Her er min løsning på at løbe ark igennem:

foreach(Worksheet sheet in sheets)
{
  if (sheet.Name.Equals(arkNavn))
  {
      Worksheet mySheet = (Worksheet)sheets.get_Item(arkNavn);
  }
}

Inden foreach skal der selvfølgelig være noget initalisering og åbning af en excel fil.
Avatar billede scarface335 Nybegynder
22. april 2009 - 14:31 #6
for at kunne bruge, Microsoft.Office.Interop.Excel skal excel så ikke være installeret på den computer der skal afvikle programmet ?
Avatar billede aaberg Nybegynder
22. april 2009 - 15:42 #7
Jo
Avatar billede scarface335 Nybegynder
22. april 2009 - 15:45 #8
Der er ikke installeret excel på de computere der skal afvikle programmet.
Avatar billede scarface335 Nybegynder
30. juni 2010 - 07:44 #9
lukket
Avatar billede arne_v Ekspert
30. juni 2010 - 15:48 #10
Og hvad var loesnigen?
Avatar billede scarface335 Nybegynder
30. juni 2010 - 15:54 #11
jeg fandt aldrig nogen programerings mæssig løsning, i stedet blev løsningen at arknavn altid var der samme, lukkede sprøgsmålet, fordi der ikke var kommet nogle svar eller kommentarer i over et år.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester