Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Na jednoduché čítanie dát z Excelu môžeš použiť ADO.NET (napr. Microsoft Jet OLE DB). Ak tam máš nie…
los 10.04.2012 20:10
los
Mohl bych prosím poprosit o nějaký krátký příklad?
Isair 10.04.2012 20:25
Isair
Píšem priamo sem, tak tam môžu byť chyby. Vychádzal som z príkladov na MSDN. Je to klasický ADO.NET…
los 10.04.2012 20:52
los
Použil jsem nakonec tvůj kód, každopádně kde je ta výstupní hodnota? Je to v proměnné value? Jak se… nový
Isair 11.04.2012 19:49
Isair
Prístup pomocou reader-a je efektívny spôsob, ako prečítať postupne všetky riadky. Po posunutí reade… poslední
los 11.04.2012 20:50
los

Na jednoduché čítanie dát z Excelu môžeš použiť ADO.NET (napr. Microsoft Jet OLE DB). Ak tam máš niečo komplikovanejšie, tak si užiješ s dátovými typmi.

Existujú aj knižnice, ktoré nepotrebujú pre prístup k dátam v Exceli nainštalovaný samotný Excel (napr. Excel Data Reader).

S novšou verziou Office môžeš použiť Open XML SDK - na MSDN je k tomu veľa príkladov.

Dá sa to samozrejme riešiť aj cez COM tak, ako to je v tom odkaze, ktorý si napísal. V ASP.NET-e je to síce Microsoftom oficiálne neodporúčaný spôsob, ale keď akceptuješ riziká a dáš si pozor na pár vecí, tak sa to dá. Ten príklad v tom odkaze si ale na tých pár vecí pozor nedáva, takže na tvojom mieste by som skúsil niektorú z predchádzajúcich možností.

Píšem priamo sem, tak tam môžu byť chyby. Vychádzal som z príkladov na MSDN. Je to klasický ADO.NET kód:

var connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\data.xls;Extended Properties=Excel 8.0;";
using (var connection = new OleDbConnection(connectionString))
{
  connection.Open();
  using (var command = connection.CreateCommand())
  {
    command.CommandText = "select * from [Sheet1$]";
    using (var reader = command.ExecuteReader())
      while (reader.Read())
      {
        var value = reader.GetValue(0);
        // atď.
      }
  }
}

Prípadne ešte môžeš použiť Linq to Excel.

Prístup pomocou reader-a je efektívny spôsob, ako prečítať postupne všetky riadky. Po posunutí reader-a volaním metódy Read máš prístup k hodnotám v nasledujúcom riadku. Metódou GetValue sa dostaneš k hodnote v požadovanom stĺpci. Sú aj metódy GetInt32, GetString a pod., pomocou ktorých sa tiež dostaneš k hodnote daného typu (v prípade nesprávneho typu to skončí výnimkou).

V tom príklade je vo value hodnota z prvého stĺpca. Keď si to odkrokuješ vnútri toho cyklu, tak si môžeš pozrieť, čo vráti napr. reader.GetValue(1), akého typu, aký je počet polí v reader-i a pod. Ak by si si prečítal tie odkazy, tak by tam zrejme bolo aj to, ako sa dostať k schéme tabuľky, ako prečítať údaje z nejakého rozsahu namiesto celého hárku, atď.

Ďalšia možnosť je naplniť to do DataTable, ako to bolo v iných príkladoch. DataTable je taká malá jadrová elektráreň, ktorá sa hodí keď chceš pracovať s dátami (meniť ich) oddelene od databázy. Pre čítanie je lepší ten DataReader.

Zpět do poradny Odpovědět na původní otázku Nahoru