Kommunikointi Excelin kanssa

Yxsälli

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

5

154

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • 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
      • 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

    1. Vesikin maksaa, miksei hengitysilma?

      Jatkuvasti itketään ettei ole rahaa mihinkään, mutta tilastojen mukaan rahaa on enemmän kuin koskaan, joten miksei asial
      Maailman menoa
      13
      1713
    2. Satuolennoista tarinointi ei kuulu peruskoulun tehtäviin

      Opetustunteja on muutenkin käytössä vain rajallinen määrä. Eli nämä satuhommat koulun ulkopuolelle vapaaehtoisiin harras
      Maailman menoa
      140
      1702
    3. Suomalainen perheenisä vaatii Suvivirren esittämisestä hyvityksiä

      Itse lapsena uskonnonopetuksesta vissiin traumoja saanut ihka suomalainen (!) perheenisä vaatii Espoon kaupungilta korva
      Maailman menoa
      291
      1312
    4. Lahkokasteen ja kristillisen kasteen erot

      Raamatun mukaan Kristillisessä yhdessä kasteessa Jumala pesee ja puhdistaa ihmisen sydämen ja poistaa perisynnin kirouks
      Kaste
      422
      1098
    5. Mies profiloin sinut

      Etsit täysin hallittavaa mutta samalla poikkeuksellista ihmistä. Etsit jotain mitä et koskaan tule saamaan.
      Ikävä
      210
      1076
    6. Mitä haluaisit

      Tehdä kaivattusi kanssa?
      Ikävä
      130
      972
    7. Salainen kastekoulutus

      Millainen on helluntailainen kastekoulutus ja kauanko se kestää ?
      Kaste
      285
      965
    8. Heikki Paasosen Marita-vaimo jätti tunteikkaat jäähyväiset: "Tällä kertaa me..."

      Heikki Paasonen on naimisissa Marita Paasosen (os. Alatalo) kanssa ja heillä on kaksi pientä lasta. Nyt koitti aika jätt
      Suomalaiset julkkikset
      3
      915
    9. Känsäkoura ja hotelli

      Tietoa kuka ostanut?
      Kuhmo
      10
      895
    10. Pirkanlinna yleisötapahtuma

      Oli todella hyvä tilaisuus. Ja EERO. L. Aivan mahtava tyyppi. Veti rennosti ja asiallisesti. Ja yleisöltä hyviä kysymyks
      Ähtäri
      49
      888
    Aihe