Předmět Autor Datum
Není možné data předem vyexportovat do CSV? S Excelovským formátem to bude asi docela problém.
host 10.04.2012 17:05
host
Mám v zadání přímo z xls. Zde: http://weblog.clovicek.net/prispevek-cteni-dat-z-e xcelu-pomoci-net-c…
Isair 10.04.2012 17:08
Isair
Co znamená nefunguje?
Wikan 10.04.2012 18:09
Wikan
Že to je rozbitý. :-[
host 10.04.2012 18:33
host
No jsem v C# začátečník, ale potřebuji se to do práce naučit. Celou dobu dělám vše v php a skok do a…
Isair 10.04.2012 20:03
Isair
To jsi ale pořád nenapsal, co konkrétně ti nefunguje.
Wikan 10.04.2012 20:06
Wikan
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…
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
Tak jsem si poradil pomocí tohoto návodu: watch celé zadání ale je, aby to vytvářelo html tabulku z…
Isair 10.04.2012 21:09
Isair
Máš dáta, tak si ich pošleš do view-u, tam ich preiteruješ a vygeneruješ HTML kód. Nechápem, s čím m…
los 10.04.2012 21:18
los
Jak ta data rozházet, ale asi už vím...
Isair 10.04.2012 21:20
Isair
Napr. ak by som to robil s tým DataReader-om, tak tam, kde som dal komentár atď., tak tam by som vyt…
los 10.04.2012 21:28
los
To jde ale o to jestli chce klasické ASP.NET nebo MVC. I když MVC je pro tyhle účely určitě lepší.
Wikan 10.04.2012 21:31
Wikan
Keď neuviedol konkrétne, tak predpokladám, že používa aktuálne technológie.
los 10.04.2012 21:32
los
Tak ono je aktuální obojí. MVC není náhrada za ASP.NET, je to jenom jiná možnost.
Wikan 10.04.2012 21:38
Wikan
konkrétně asp.net
Isair 10.04.2012 22:23
Isair
Konkrétne ASP.NET je aj custom HTTP handler. Existuje ASP.NET Web Forms, ASP.NET MVC (1, 2, 3) a pod…
los 10.04.2012 22:24
los
ASP.NET Web Forms, mě nikdo ani neřekl v čem to mám udělat, ale webforms mám defaultní
Isair 10.04.2012 22:38
Isair
Ja by som si napr. v súčasnosti Web Forms nezvolil. Vlastne od čias, keď vyšla prvá verzia ASP.NET M…
los 10.04.2012 22:44
los

No jsem v C# začátečník, ale potřebuji se to do práce naučit. Celou dobu dělám vše v php a skok do asp je pro mě docela skok. Takže třeba ten kód funguje, třeba něco dělám špatně já. Ale skutečně jsem to nerozchodil...

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.

Napr. ak by som to robil s tým DataReader-om, tak tam, kde som dal komentár atď., tak tam by som vytváral inštanciu nejakého modelu, ktorý by som si ukladal do listu.

Do view-u by som potom poslal len pole modelov:

<table>
@foreach (var item in Model) {
  <tr><td>@item.Id</td><td>@item.Name</td></tr>
}
</table>

Ja by som si napr. v súčasnosti Web Forms nezvolil. Vlastne od čias, keď vyšla prvá verzia ASP.NET MVC, by som sa už k Web Forms nevracal. Ak len začínaš tieto stránky, tak by som na tvojom mieste switch-ol do ASP.NET MVC. Ak začínaš celkovo s ASP.NET, tak s Web Forms by som ani nezačínal, ak sa nechceš vyslovene venovať Web Forms-om. Niekedy je síce Web Forms nevyhnutnosť, ale ak je cieľom robiť klasické (moderné) webové stránky, tak ASP.NET MVC je ta správna cesta.

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