Avatar billede moine Nybegynder
06. juli 2007 - 15:37 Der er 7 kommentarer og
1 løsning

Opret og skriv til excel fil - uden at have excel installeret!

Hej

Er det muligt at lave et program med VB6 der kan oprette og skrive til en excel fil, selv om programmet kører på en computer uden excel installeret?

Jeg har fundet ud af at lave noget kode, der kan åbne excel og række for række skrive værdier i cellerne, men på den computer som programmet skal køre på (den er tilsluttet måleudstyr i et laboratorie) er der ikke excel.

Jeg havde forestillet mig noget lignende den normale write og append til en tekst-fil, bare med en excel-fil i stedet, så man slippede for selv at skulle importere tekst filen i excel. Det er også vigtigt at filen gemmes hver gang der er skrevet til den.

Programmet kunne eventuelt tage en tom excel-fil på computeren, kopiere og omdøbe den og så skrive i den.

Håber det er til at forstå hvad jeg vrøvler om ;-)
Avatar billede bubbaa Nybegynder
06. juli 2007 - 15:54 #1
Måske dette kan bruges:
http://www.ibm.com/developerworks/library/x-tipexc.html
De laver excel data om til xml, så det må også være muligt den anden vej.
Avatar billede word-hajen Nybegynder
06. juli 2007 - 17:32 #2
bubbaa er helt klart inde på noget. For du kan skrive dine data i/til en xml-fil, og når du så skal bruge det i Excel (for det skal du vel på et tidspunkt?), importerer du blot xml-filen.
Avatar billede kjulius Novice
06. juli 2007 - 17:35 #3
Der er et par muligheder. Hvis du bare skal have mulighed for at åbne filen i et excel program for at bearbejde data, så ville det nemmeste være at oprette en CSV fil (Comma Separated Values). En sådan fil, som bare er en tekstfil, hvor de enkelte kolonner er adskilt med et komma og hver række af et linieskift. Det vil reelt sige, at det vil kunne ske med en simpel WRITE# instruktion.

OPEN "C:\temp\test.CSV" FOR APPEND AS #1
WRITE#1,celleA1,celleB1,celleC1,celleD1
WRITE#1,celleA2,celleB2,celleC2,celleD2
WRITE#1,celleA3,celleB3,celleC3,celleD3
CLOSE#1

Der er selvfølgelig den lille finte, at et dansk (kontinentalt europæisk) program vil forvente, at man i stedet for komma bruger semikolon til at separere værdier og bruger komma til at angive decimalpunktet. WRITE# indsætter imidlertid altid et komma mellem værdierne og skriver numeriske felter med et punktum som decimalpunkt. Det modsiger jo lidt hinanden på denne side af "dammen". Man vil dog altid kunne bruge import-funktionen til at indlæse en "Engelsk" CSV-fil. Nogle versioner accepterer også et "Engelsk" CSV format, hvis man dobbeltklikker på filen, men ikke hvis man bruger åbn-ikonet (Go figure!!).
Men det vil under alle omstændigheder være forholdsvis nemt at lave det i en "Dansk" version med en PRINT# - hvor man selv indsætter kolonneseparatoren (;).


Med en CSV fil har man ikke mulighed for at formattere regnearket.

Hvis du ønsker at have mulighed for at lave lidt formattering af dine data, er der en anden mulighed. Selv om den vist ikke er dokumenteret, kan man bruge HTML kode til det formål.

Hvis du laver en fil med endelsen .XLS men fylder HTML i filen, vil Excel registrere dette under åbningen og fortolke indholdet. Dvs., at du kan bruge HTMLs table konstruktion til at tilføje farve, fonttype og størrelse til indholdet af cellerne.

OPEN "C:\temp\test.xls" FOR OUTPUT AS #1
PRINT#1, "<HTML>"
PRINT#1, "<BODY>"
PRINT#1, "<TABLE>"
PRINT#1, "<TR><TD ALIGN='center' BGCOLOR='red'>" & cellA1 & "</TD><TD ALIGN='right' BGCOLOR='blue'><EM>" & celleB1 & "</EM></TD></TR>"
PRINT#1, "<TR><TD ALIGN='center' BGCOLOR='red'>" & cellA2 & "</TD><TD ALIGN='right' BGCOLOR='blue'><EM><I><FONT COLOR='white' " & celleB2 & "</I></EM></TD></TR>"
PRINT#1, "<TR><TD ALIGN='center' BGCOLOR='red'>" & cellA3 & "</TD><TD ALIGN='right' BGCOLOR='blue'><EM>" & celleB3 & "</EM></TD></TR>"
PRINT#1, "</TABLE></BODY></HTML>"
CLOSE#1

En svaghed ved denne metode er, at det er svært at tilføje nye data til en fil, da det vil "ødelægge" HTML konstruktionen.

Ud fra dit spørgsmål antager jeg, at det er af større vigtighed at kunne tilføje data til en bestående fil end at kunne foretage "smukkesering" af data, så jeg vil tro, at en CSV fil er det bedste bud.

En helt tredie mulighed var en tabulatorsepareret tekstfil, som Excel også kan indlæse, men normalt vil en .txt fil jo ikke være tilknyttet Excel, så hvis man dobbeltklikker på filen, vil den sandsynligvis blive åbnet i Notepad, Wordpad eller lign. tekstbehandlingsprogram.

Der er sikkert også et par Active-X/OCX udvidelser, som kan bruges, hvis du har lyst til at betale lidt for det. Der er mange firmaer, som har specialiseret sig i sådanne udvidelser til standard VB.
Avatar billede kjulius Novice
06. juli 2007 - 17:54 #4
Jeg er vist i min iver for at få sendt min kommentar kommet til at lave en fejl i html koden. <FONT> elementet skal naturligvis afsluttes igen. Selv om det koden bare var for at angive mulighederne, bør den naturligvis være i orden. Jeg håber der ikke er flere fejl... :-!

OPEN "C:\temp\test.xls" FOR OUTPUT AS #1
PRINT#1, "<HTML>"
PRINT#1, "<BODY>"
PRINT#1, "<TABLE>"
PRINT#1, "<TR><TD ALIGN='center' BGCOLOR='red'>" & cellA1 & "</TD><TD ALIGN='right' BGCOLOR='blue'><EM>" & celleB1 & "</EM></TD></TR>"
PRINT#1, "<TR><TD ALIGN='center' BGCOLOR='red'>" & cellA2 & "</TD><TD ALIGN='right' BGCOLOR='blue'><EM><I><FONT FACE='Verdana' SIZE='3' COLOR='white'>" & celleB2 & "</FONT></I></EM></TD></TR>"
PRINT#1, "<TR><TD ALIGN='center' BGCOLOR='red'>" & cellA3 & "</TD><TD ALIGN='right' BGCOLOR='blue'><EM>" & celleB3 & "</EM></TD></TR>"
PRINT#1, "</TABLE></BODY></HTML>"
CLOSE#1
Avatar billede moine Nybegynder
06. juli 2007 - 18:06 #5
Tak for det... Jeg vil kigge lidt på det inden jeg vender tilbage med point :-)

Hele engelsk-dansk decimalseperator historien er netop grunden til at jeg vil have det direkte ind i en excel-fil. Er nemlig træt af at døje med excels import af data-fil guide ;-)

Lidt selvstændig googling gav lidt info om en ExcelFile.cls som måske også kunne være interessant. Om det kan gøre tricket ved jeg dog ikke...

Vender tilbage
Avatar billede moine Nybegynder
06. juli 2007 - 19:53 #6
Jeg fandt noget som efter beskrivelsen burde kunne gøre det - så skal jeg bare finde ud af hvordan man bruger det ;-)

http://www.freevbcode.com/ShowCode.Asp?ID=6887
Avatar billede kjulius Novice
06. juli 2007 - 23:31 #7
Ja, det ser ud til at være "the real deal". :-)
Avatar billede moine Nybegynder
07. juli 2007 - 12:21 #8
Efter at have leget med skidtet hentet fra ovenstående link hele natten kan jeg nu konkludere at det ER the real deal - der er godt nok mange moduler og dll-filer der skal installeres, men det virker og er meget enkelt at bruge når det først virker.

Så... I skal alle have mange tak for hjælpen, men jeg tillader mig at snuppe pointene selv og så opfordrer jeg folk til at bruge ovenstående til fremstilling af Excel-filer i VB :o)
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
Kurser inden for grundlæggende programmering

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