Avatar billede anders_cp Nybegynder
10. december 2008 - 16:10 Der 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);
               

cmd.CommandText = "UPDATE [Data$] SET Måned = '98', Afregning = ?, Lukkedato = ?, Status = ?, Produkt = ?, Startdato = ?, Partner = ? WHERE WO = ?";
//cmd.Parameters.Add(maanedParam); // Param 1
cmd.Parameters.Add(afregningParam); // Param 2
cmd.Parameters.Add(lukkedatoParam); // Param 3
cmd.Parameters.Add(statusParam); // Param 4
cmd.Parameters.Add(produktParam); // Param 5
cmd.Parameters.Add(startdatoParam); // Param 6
cmd.Parameters.Add(partnerParam); // Param 7

cmd.Parameters.Add(woParam); // Param 8

for (int i = 0; i < woDataView.Count; i++)
{
  //maanedParam.Value = woDataView[i][(int)queryColumn.LUKKETMAANED]; // Param 1
  afregningParam.Value = woDataView[i][(int)queryColumn.AFREGNING]; // Param 2
  lukkedatoParam.Value = woDataView[i][(int)queryColumn.LUKKEDATO]; // Param 3
  statusParam.Value = woDataView[i][(int)queryColumn.LUKKESTATUS]; // Param 4
  produktParam.Value = woDataView[i][(int)queryColumn.PRODUKT]; // Param 5
  startdatoParam.Value = woDataView[i][(int)queryColumn.STARTDATO]; // Param 6
  partnerParam.Value = woDataView[i][(int)queryColumn.PARTNER]; // Param 7

  woParam.Value = woDataView[i][(int)queryColumn.WO]; // Param 8

  cmd.ExecuteNonQuery();
}
conn.Close();

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:

                string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                    "Data Source=" + uploadedFilename + ";" +
                    "Extended Properties='Excel 8.0;IMEX=1;'";

Men får fejlen:
System.Data.OleDb.OleDbException: Handlingen skal bruge en opdaterbar forespørgsel.

Summa Summarum. Ønsker at fjerne apostrofen fra excel-ark via C# før eller efter data er sat ind.
Avatar billede aaberg Nybegynder
10. december 2008 - 16:14 #1
Dette er et skud i tågen, men prøv:

string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                    "Data Source=" + uploadedFilename + ";" +
                    "Extended Properties=\"Excel 8.0;IMEX=1\"";
Avatar billede anders_cp Nybegynder
10. december 2008 - 16:25 #2
Får desværre samme fejl:
System.Data.OleDb.OleDbException: Handlingen skal bruge en opdaterbar forespørgsel.
Avatar billede sherlock Nybegynder
10. december 2008 - 16:31 #3
Prøv med 98 i stedet for '98'.

Apostroffen betyder: "Formattér altid som tekst"
Avatar billede anders_cp Nybegynder
10. december 2008 - 16:48 #4
98 med og uden ' ændrer ikke noget :-(

Tak for info om apostroffen - så skal vi bare finde ud af hvordan data IKKE bliver formateret som tekst ;)
Avatar billede anders_cp Nybegynder
10. december 2008 - 21:20 #5
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."
Avatar billede aaberg Nybegynder
10. december 2008 - 21:40 #6
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\"";
Avatar billede anders_cp Nybegynder
10. december 2008 - 23:22 #7
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();)

.. men lidt videre kom jeg ;)
Avatar billede aaberg Nybegynder
11. december 2008 - 08:12 #8
Jeg tjekkede på connectionstrings.com (http://connectionstrings.com/excel). Her står:

""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.
Avatar billede aaberg Nybegynder
11. december 2008 - 09:08 #9
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.

Hvad skal jeg sige? Excel sucks.
Avatar billede anders_cp Nybegynder
11. december 2008 - 14:59 #10
Ja, du har ret. Excel sucks.
Har forsøgt at ændre datatyper og indsætte kolonner eller rækkker, men har ikke fået det til at virke som dig.. :-(
Avatar billede aaberg Nybegynder
11. december 2008 - 15:22 #11
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)

Men, har du prøvet det?
Avatar billede anders_cp Nybegynder
11. december 2008 - 15:42 #12
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
Avatar billede aaberg Nybegynder
12. december 2008 - 09:44 #13
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.
Avatar billede anders_cp Nybegynder
12. december 2008 - 09:54 #14
hmm. det sucks me'r og me'r det excel.

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 lader spørgsmålet være lidt åbent endnu.
Avatar billede aaberg Nybegynder
16. december 2008 - 12:44 #15
Jeg stødte tilfældigvis på denne hjemmeside:
http://www.spreadsheetgear.com/

Så vidt jeg forstår det, kan nogle af komponenterne downloades, bare man har registreret et Visual Studio Express produkt.
Avatar billede anders_cp Nybegynder
17. december 2008 - 00:04 #16
Mange tak.
Vil kigge på det senest i weekenden og vende tilbage hertil ;)
Avatar billede anders_cp Nybegynder
22. december 2008 - 10:23 #17
hmm. det ser da ud til at koste 999 dollars
Avatar billede aaberg Nybegynder
03. januar 2009 - 20:40 #18
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.
Avatar billede anders_cp Nybegynder
19. juli 2009 - 19:57 #19
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.
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