10. december 2008 - 16:10Der er
18 kommentarer og 1 løsning
Uønsket apostrof i excel-ark
Hej Jeg har et meget irriterende problem, som jeg ønsker bud på hjælp til. Det drejer sig om et excel-ark, som er udfyldt, men som have opdateret nogle rækker med data fra C#.
Det går fint, BORTSET fra en apostrof(') i hver eneste celle. Denne apostrof ønsker jeg fjernet.
Jeg har googlet mig frem til at apostroffen sættes for at undgå at excel formaterer cellerne, og forsøgt flere ting, men intet har jeg fået til at virke :-(
Her er lidt kode: string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + uploadedFilename + ";" + "Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = conn; conn.Open();
OleDbParameter maanedParam = new OleDbParameter("@Param1", OleDbType.Integer); OleDbParameter afregningParam = new OleDbParameter("@Param2", OleDbType.VarChar); OleDbParameter lukkedatoParam = new OleDbParameter("@Param3", OleDbType.Date); OleDbParameter statusParam = new OleDbParameter("@Param4", OleDbType.VarChar); OleDbParameter produktParam = new OleDbParameter("@Param5", OleDbType.VarChar); OleDbParameter startdatoParam = new OleDbParameter("@Parm6", OleDbType.Date); OleDbParameter partnerParam = new OleDbParameter("@Param7", OleDbType.VarChar);
OleDbParameter woParam = new OleDbParameter("@Param8", OleDbType.VarChar);
Som det ses har jeg udkommenteret maaned-parameteren og direkte indsat '98'. Dette for at teste om der ville være nogen ændring i apostrof-problemt. Måned=98 vises stadig med apostrof ('98).
Desuden har jeg googlet mig til at fejlen muligvis ligger i connectionstrengen - at imex=1 skulle løse problemet. Derfor har jeg forsøgt mig med følgende connection-string:
Måske kan I hjælpe mig videre. Når er tilføjer en enkelt extended properties f.eks.: string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=C:\\SourceSafe\\Website\\WebSite\\Admin\\Stine\\Files\\InvoiceProposal\\10-12-08_sadTest.xls; Extended Properties=Excel 8.0;HDR=YES";
(FØR) "Extended Properties=Excel 8.0;";
Så får jeg fejlen: "Den installerbare ISAM kan ikke findes."
du skal have "" rundt om Extended Properties værdien. string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=C:\\SourceSafe\\Website\\WebSite\\Admin\\Stine\\Files\\InvoiceProposal\\10-12-08_sadTest.xls; Extended Properties=\"Excel 8.0;HDR=YES\"";
Ja, det hjalp sør'me. HDR=YES virker. Men skriver jeg IMEX=1 istf. HDR=YES, får jeg fejlen: Handlingen skal bruge en opdaterbar forespørgsel. når den forsøger at eksekvere sql'en ( cmd.ExecuteNonQuery();)
""IMEX=1;" tells the driver to always read "intermixed" (numbers, dates, strings etc) data columns as text. Note that this option might affect excel sheet write access negative."
Lyder for mig som om IMEX=1 kun virker når du læser data, og ikke når man opdaterer eller indsætter.
Nu har jeg læst lidt på nettet, og eksperimenterer lidt selv. Excel har ikke faste datatyper på kolonner, i stedet bruger den de første 8 kolonner til at gætte sig til datatypen. Hvis der i de 8 første kolonner er flest tal, bliver tal sat ind som tal. Hvis de fleste er tekst, bliver tallene sat ind som tekst (Altså med en 'apostrof). I min test fik jeg samme problem som dig. Men sat jeg manuelt et par rækker ind i arket før jeg indsatte data via OleDb, så blev tallene korrekt formateret.
Nu læser jeg lige det jeg har skrevet, og det giver jo ingen mening. Jeg mener selvfølgelig rækker i stedet for kolonner! Jeg skrev det vist lidt for tidligt om morgenen!!
Det jeg prøver at sige er: xcel har ikke faste datatyper på kolonner, i stedet bruger den de første 8 RÆKKER til at gætte sig til datatypen. Hvis der i de 8 første RÆKKER er flest tal, bliver tal sat ind som tal. Hvis de fleste er tekst, bliver tallene sat ind som tekst (Altså med en 'apostrof)
Hej Mit falkeøje havde luret den med rækker kontra kolonner. Jeg prøvede dog for en sikkerhedsskyld med begge dele.
Synes jeg har prøvet med flere variationer, men vil forsøge mig igen. Her er et skærmdump. Måske du kan fortælle mig hvor de to rækker skal være.. før/efter overskriften eller? http://www.henrik-hartig.dk/excel.png
Den måde jeg har fået det til at virke, er ved at indsætte et par rækker med data. Jeg indsætter altså bare noget dummy-data, som er i det rigtigt format. Så kan Excel regne datatypen ud.
Men så vidt jeg forstår din problemstillingen, så er det en slags eksport af data du laver. Så duer det jo ikke, hvis der i de 8 første rækker er indsat dummy-data. Det ville jo gøre forvirringen total. Jeg har desværre ikke en løsning på dit problem.
Faktisk har jeg i det sidste tid arbejdet lidt med Sql Server Reporting Services. Fra en rapport har du mulighed for at eksportere til Excel. Disse Excel eksporter har nøjagtig samme datatypeproblem. Sql Server Reporting Services er jo et Microsoft produkt, når Microsoft selv ikke kan eksportere i rigtig dataformat, begynder jeg at tvivle på om det kan lade sig gøre.
Noget rigtigt møg, men du skal have mange tak for din efterforskning og forklaringer. Har set man kan købe forskellige excel-3.parts-programmer, måske det vil være en mulighed for mig...
Jeg må indrømme, at jeg ikke har prøvet det, jeg så bare en reklame på en Microsoft-side, om at man kunne få komponenten gratis, hvis man registrerer et Visual Studio Express produkt.
Undskyld det lange fravær, men jeg har lagt projektet lidt på is. Vil måske senere oprette en ny tråd senere. Men indtil nu siger jeg tak og lukker.
Synes godt om
Ny brugerNybegynder
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.