Tarkoitus on kirjoittaa Lazaruksella avoinna olevaan Excel-taulukkoon. Suoraan ohjelmassa annetusta merkkijonosta sisältö näkyy oikein Excelissä, mutta skandit aiheuttavat virheen. Jos sama syöte on muuttujassa tai esim. StringGridissä, Exceliin tulee kiinalaisia merkkejä. Jos kierrätän sisällön Variant-muuttujan kautta, homma onnistuu, paitsi skandit näkyvät väärin. Mitä on tehtävä?
Olen käyttänyt pohjana seuraavaa esimerkkiä (Example - Open/Read Excel file):
http://wiki.freepascal.org/Office_Automation
Kommunikointi Excelin kanssa
5
83
Vastaukset
- merkkikoodausta
Auttaisiko se että muunnat Lazaruksessa merkkijonot utf16 muotoon ennenkuin viet ne variant muuttujan kautta. Ilmeisesti rajapinnan merkkijonojen koodausmuoto ei täsmää. Eli excel kuvittelee merkistönkoodauksen joksikin muuksi
- Yxsälli
Sain toimimaan muunnoksella UTF8ToAnsi. Jostain syystä tuo variant-muuttuja tarvitaan välivaiheena.
- pchar
Pascalin perusmerkkijonotyyppi on erilainen kuin muissa kielissä. Muut kielet käyttävät pääsääntöisesti nollaan loppuvia merkkijonoja. Toki niitä voi käyttää Pascalissakin (vinkki PChar). Mutta noi pascalin perusmerkkijonotyypin käyttö on helpompaa.
- excelli
Eräs kehittely mahdollisuus on korvata Excel osuus omalla taulukkolaskenta osiolla.
Jolloin käyttäjän koneessa ei tarvita Exceliä. Toki mahdolliset tuotokset kannattaa tallentaa myös Excel muotoon.
Oman taulukkolaskentaosion voi tehdä FPSpreadsheet-komponenteilla.
Katso esim.
http://wiki.lazarus.freepascal.org/FPSpreadsheet_tutorial:_Writing_a_mini_spreadsheet_application/fi- merkkivalikoima
Koska Excel on Microsoftin tuote, siinä käytettävä merkkikoodaus on vanhemmissa versioissa Windows-1252 ja uudemmissa mitä ilmeisimmin UTF-16LE.
FreePascalissa ainakin linux -versiossa oletus merkkikoodaukselle on UTF-8, windows -versiosta ei ole varmaa tietoa.
Mutta:
teepä näin:
procedure Dummy(var S:String);
begin
S := S ''; // Tyhjä merkkijono, mutta luultavasti estää kääntäjää optimoimasta koko riviä pois.
end;
var
S : String;
begin
S := 'Sähkö';
// tutki debuggerilla muuttujaa S.
// JOS se on Windows-1252 , niin kukin kirjain kuluttaa yhden tavun.
// JOS se on UTF-16, niin kukin kirjain kuluttaa kaksi tavua.
// JOS se on UTF-8, niin ä j ö kuluttavat kumpikin kaksi tavua, kaikki muut kirjaimet yhden tavun.
Dummy(S);
end;
Eli jollei se Excelisi ole ihan ikivanha, niin voit olettaa sen enkoodaavan UTF-16LE -muodossa.
huom: en ole tietoinen, miten Excel enkoodaa XLS -tiedostoon sen, että kyseessä oleva XLS käyttää UTF16 -enkoodausta.
Mutta jotenkin se on sinne koodattu, jos kyseistä koodausta EI OLE, silloin Excel olettaa koodauksen olevan Windows-1252 (Suomessa, USA:ssa, ja suurimmassa osassa Euroopan maita).
Jätetään omaan arvoonsa esim. Windowsin venäjän- , thain- , japanin- ja kiinankieliset versiot, joissa se oletus on jotain muuta kuin Windows-1252.
Microsoftin tapoihin ei ole kuulunut yhteensopivuuden rikkominen surutta, kuten Linux -maailmassa tehdään.
Siksi MS:n tiedostoformaatissa oletus on tuo Windows-1252, ja jos se koodaus on jokin muu (kuten UTF16LE, josta MS:n dokumentaatio käyttää termiä "UNICODE"), se on tiedostossa tavalla tai toisella merkittynä, ilman merkintää voit olettaa Windows-1252.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Nurmossa kuoli 2 Lasta..
Autokolarissa. Näin kertovat iltapäivälehdet juuri nyt. 22.11. Ja aina ennen Joulua näitä tulee. . .794468Vanhalle ukon rähjälle
Satutit mua niin paljon kun erottiin. Oletko todella niin itsekäs että kuvittelet että huolisin sut kaiken tapahtuneen503105Maisa on SALAKUVATTU huumepoliisinsa kanssa!
https://www.seiska.fi/vain-seiskassa/ensimmainen-yhteiskuva-maisa-torpan-ja-poliisikullan-lahiorakkaus-roihuaa/15256631353091Mikko Koivu yrittää pestä mustan valkoiseksi
Ilmeisesti huomannut, että Helenan tukijoukot kasvaa kasvamistaan. Riistakamera paljasti hiljattain kylmän totuuden Mi4002179Purra hermostui A-studiossa
Purra huusi ja tärisi A-studiossa 21.11.-24. Ei kykene asialliseen keskusteluun.2191296Ensitreffit Hai rehellisenä - Tämä intiimiyden muoto puuttui suhteesta Annan kanssa: "Meillä ei..."
Hai ja Anna eivät jatkaneet avioliittoaan Ensitreffit-sarjassa. Olisiko mielestäsi tällä parilla ollut mahdollisuus aito111203- 761197
Joel Harkimo seuraa Martina Aitolehden jalanjälkiä!
Oho, aikamoinen yllätys, että Joel Jolle Harkimo on lähtenyt Iholla-ohjelmaan. Tässähän hän seuraa mm. Martina Aitolehde301064- 631056
Miksi pankkitunnuksilla kaikkialle
Miksi rahaliikenteen palveluiden tunnukset vaaditaan miltei kaikkeen yleiseen asiointiin Suomessa? Kenen etu on se, että111983