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

83

    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. Nurmossa kuoli 2 Lasta..

      Autokolarissa. Näin kertovat iltapäivälehdet juuri nyt. 22.11. Ja aina ennen Joulua näitä tulee. . .
      Seinäjoki
      79
      4468
    2. Vanhalle ukon rähjälle

      Satutit mua niin paljon kun erottiin. Oletko todella niin itsekäs että kuvittelet että huolisin sut kaiken tapahtuneen
      Ikävä
      50
      3105
    3. Maisa on SALAKUVATTU huumepoliisinsa kanssa!

      https://www.seiska.fi/vain-seiskassa/ensimmainen-yhteiskuva-maisa-torpan-ja-poliisikullan-lahiorakkaus-roihuaa/1525663
      Kotimaiset julkkisjuorut
      135
      3091
    4. Mikko Koivu yrittää pestä mustan valkoiseksi

      Ilmeisesti huomannut, että Helenan tukijoukot kasvaa kasvamistaan. Riistakamera paljasti hiljattain kylmän totuuden Mi
      Kotimaiset julkkisjuorut
      400
      2179
    5. Purra hermostui A-studiossa

      Purra huusi ja tärisi A-studiossa 21.11.-24. Ei kykene asialliseen keskusteluun.
      Perussuomalaiset
      219
      1296
    6. Ensitreffit 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 aito
      Ensitreffit alttarilla
      11
      1203
    7. Mitä sanoisit

      Ihastukselle, jos näkisitte?
      Tunteet
      76
      1197
    8. 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 Aitolehde
      Suomalaiset julkkikset
      30
      1064
    9. Miten meinasit

      Suhtautua minuun kun taas kohdataan?
      Ikävä
      63
      1056
    10. Miksi pankkitunnuksilla kaikkialle

      Miksi rahaliikenteen palveluiden tunnukset vaaditaan miltei kaikkeen yleiseen asiointiin Suomessa? Kenen etu on se, että
      Maailman menoa
      111
      983
    Aihe