Excel import hibák oledb-vel

Excel import hibák oledb-vel
2009-02-12T16:41:18+01:00
2009-02-13T11:48:08+01:00
2022-11-12T15:00:38+01:00
lyahim2
Sziasztok!

Azzal a problémával találkoztam, hogy egy excel fájl adatbázisba importálásakor, azt tapasztalom, hogy van egy 4 oszlopos 40 soros excel fájlom, amit elejétől a végéig be szeretnék tölteni az adatbázisba. Az oledb provider viszont csak 3 oszlopot állapít meg!
Vki találkozott már ilyen problémával, vagy tud rá vki ötletet adni, hogy kéne ezt megfelelően kezelni?
A provider a következő:
String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + workbookpath + ";Extended Properties=\"Excel 8.0;HDR=No;\"";
Köszi a segítséget!
Mutasd a teljes hozzászólást!
ÉLJEN a SUFNITUNING!!!

mivel semmi megoldást nem találtam neten, meg nem értek néhány dolgot(pl a rows és a columns is miért Range?). Így arra jutottam, hogy megnézem az "a1" cellát és ha az üres, akkor rakok bele egy karaktert, lekérdezem az oszlopok és sorok számát majd törlöm a beírt karaktert és mindig mentek...
Ez így müködik, de ha vki tud szebb megoldást az kérem ossza meg velem!
Szlaukó Mihály
Mutasd a teljes hozzászólást!

  • A bökkenő valszeg nem a bemásoilt kódban lesz, hanem az excel file-ban magában. Pl. nem ismeri fel a 4. oszlopban található karaktereket a jet provider.
    Mutasd a teljes hozzászólást!
  • probald ezt:

    OleDbConnection ExcelConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + workbookpath + ";Extended Properties=Excel 8.0;"); OleDbCommand ExcelCommand = new OleDbCommand(); ExcelCommand.Connection = ExcelConnection; OleDbDataAdapter ExcelAdapter = new OleDbDataAdapter(ExcelCommand); ExcelConnection.Open(); DataTable ExcelSheets = ExcelConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); string SpreadSheetName = "[" + ExcelSheets.Rows[workSheetNumber]["TABLE_NAME"].ToString() + "]"; DataSet ExcelDataSet = new DataSet(); ExcelCommand.CommandText = @"SELECT * FROM " + SpreadSheetName; ExcelAdapter.Fill(ExcelDataSet); ExcelConnection.Close(); return ExcelDataSet;

    ez visszaadja egy DataSet-be az osszes adatot es 4 oszlopa lesz(vagyis annyi mint a excelnek)
    remelem segit, nekem igy mukodik!
    Mutasd a teljes hozzászólást!
  • Tegnap kicsit már nyugtalaln voltam, hogy elment 4 óra egy excel file-al, így néhány dolog elkerülte a figyelmemet.
    A megoldást köszönöm, igaz nem segít, ez is csak 3 oszlopot talál. Viszont most higgadtan elkezdtem debuggolni, ami a szálkezelés miatt egy kicsit nehéz(nem fontos), és a következő van: az a néhány sor amit adtál végigpötyög az excelen és annyira intelligens, hogy szivességből kihagyja a teljesen üres oszlopokat, és azokat nem is számolja. De a csavar az, hogy a 4 oszlopból 2 üres, aminek ugye nem háromnak kéne lenni, ugyanezt megcsinálja a sorokkal is, de ott már elfelejti nem hozzáadni a sorok számához, így kapok egy 40 soros DataSet táblát amiben mivel van 3 üres sor(mellékesen van vagy 10), így a 40. sorban lévő adatokat a 37. sorba tölti...
    ezt eléggé furcsálom, leginkább azért mert ha én kézzel csinálok egy excelt random összevissza beleírogatva, azt tökéletesen kezeli. Arra gondolok, hogy vmit a Munkafüzet megnyitásánál kéne beállítani, nekem ez a Converter paraméter gyanus, de nem tudom.
    Ezt az egész cécót meg lehetne kerülni, ha más módszerrel meg tudnám állapítani az adattal rendelkező sorok és oszlopok számát, mert csak arra van szükségem, ugyanis a cellák adatait magam dolgozom fel, de ha elkezdek végig gyalogolni az excel celláin az nagyon lassú.
    Mutasd a teljes hozzászólást!
  • Még egy tapasztalat, elkezdtem az excelt magát más-más formátumba mentegetni, és nagyon nem tudja kezelni, hogy az első oszlopban nincsenek adatok, azt egyszerűen kihagyja a mentéskor. Valószinüleg a providernek is ez tesz be
    Mutasd a teljes hozzászólást!
  • Megvan a hiba!
    A providernek úgy hozza létre a DataSet-t hogy a Tábla első oszlopában minenképpen legyen adat. Szóval kihagyja azt az x oszlopot ami az excelben üres.
    Mutasd a teljes hozzászólást!
  • ÉLJEN a SUFNITUNING!!!

    mivel semmi megoldást nem találtam neten, meg nem értek néhány dolgot(pl a rows és a columns is miért Range?). Így arra jutottam, hogy megnézem az "a1" cellát és ha az üres, akkor rakok bele egy karaktert, lekérdezem az oszlopok és sorok számát majd törlöm a beírt karaktert és mindig mentek...
    Ez így müködik, de ha vki tud szebb megoldást az kérem ossza meg velem!
    Szlaukó Mihály
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd