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

121

    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. YLE Äänekosken kaupunginjohtaja saa ankaraa arvostelua

      Kaupungin johtaja saa ankaraa kritiikkiä äkkiväärästä henkilöstöjohtamisestaan. Uusin häirintäilmoitus päivätty 15 kesä
      Äänekoski
      92
      1939
    2. Euroopan lämpöennätys, 48,8, astetta, on mitattu Italian Sisiliassa

      Joko hitaampikin ymmärtää. Se on aivan liikaa. Ilmastonmuutos on totta Euroopassakin.
      Maailman menoa
      278
      1771
    3. Asiakas iski kaupassa varastelua tehneen kanveesiin.

      https://www.iltalehti.fi/kotimaa/a/33a85463-e4d5-45ed-8014-db51fe8079ec Oikein. Näin sitä pitää. Kyllä kaupoissa valtava
      Maailman menoa
      307
      1575
    4. Martina lähdössä Ibizalle

      Eikä Eskokaan tiennyt matkasta. Nyt ollaan jännän äärellä.
      Kotimaiset julkkisjuorut
      183
      1455
    5. Jos ei tiedä mitä toisesta haluaa

      Älä missään nimessä anna mitään merkkejä kiinnostuksesta. Ole haluamatta mitään. Täytyy ajatella toistakin. Ei kukaan em
      Ikävä
      89
      1040
    6. Määpä tiijän että rakastat

      Minua nimittäin. Samoin hei! Olet mun vastakappaleeni.
      Ikävä
      51
      1007
    7. Avustikset peruttu.

      Aettokosken ampuraan rahat otettu poekkeen valtiolle.
      Suomussalmi
      56
      977
    8. Se nainen näyttää hyvältä vaikka painaisi 150kg

      parempi vaan jos on vähän muhkeammassa kunnossa 🤤
      Ikävä
      56
      968
    9. 67
      944
    10. Miksi mies tuntee näin?

      Eli olen mies ja ihastuin naiseen. Tykkään hänestä ja koskaan hän ei ole ollut minulle ilkeä. Silti ajoittain tunnen kui
      Ikävä
      40
      941
    Aihe