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
135
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
- 2034276
SDP haluaa 40 000 nettomaahanmuuttajaa
SDP:n Suunnanmuutos-vaihtoehtobudjetissa, käy ilmi, että demarit itse asiassa vaativat räjähdysmäistä ”työperäisen” maah1463798Orpo: Velkajarrua vastustavaa puoluetta vaikea ajatella hallitukseen
No Minja Koskelan kommunistipuolue jäi ulos tuosta. Kaikki eduskuntapuolueet vasemmistoliittoa lukuun ottamatta sopivat1373261Hienoa! Eduskunta luopui käteisen käytöstä
Nyt tuo sama muutos pitää saada myös muuhun yhteiskuntaan. Käteistähän ei tarvitse tänä päivänä enää kuin rikolliset.521638Ikävä sinua mies
Vuosia kuluu, mutta tunteet ei ole hävinnyt. Tasoittuneet toki, kun ei olla nähty. Järki palannut päähän kuitenkin. Se i191558Mikä tämä henkilö mahtaa touhuta Parkanossa
Kamalaa https://www.ylasatakunta.fi/teksti/pirkanmaan-karajaoikeus-vangitsi-koiran-tappamisesta-epaillyn-6.68.127794.b58341520Sulla on avaimet ja keinot
Jos haluat jatkaa tutustumista. Itse olen niin jäässä etten pysty tekemään enää mitään. Pidempi keppi johon on helpompi251395Orpo loukkaantui fasismiin viittaavasta sanavalinnasta
Mutta miksi loukkaantui? Orpohan on tehnyt yhteistyötä fasistien kanssa jo vuonna 2019, siis jo neljä vuotta ennen loukk271351Kiinnostaa - ei kiinnosta - kiinnostaapas
Selittäkää hämmentyneelle miksi miehiä ei ikinä kiinnosta silloin, kun sitä olisi itsekin kiinnostunut? Sitten kun siirt1171175Martina haluaa Marbellaan
Martinan tekisi mieli ottaa lennot Marbellaan, jossa näkisisi kauniita ja hyväntuulisia ihmisiä. No sitten pitää matkust2151063