🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi
9 messages
9 total messages Started by JS Sat, 17 Dec 2016 19:10
Lazarys + FPSpreadsheet + polskie "ogonki"
#345438
Author: JS
Date: Sat, 17 Dec 2016 19:10
15 lines
1310 bytes
Witam,


za pomocą FPSpreadsheet (v1.6.1) chcę odczytać komórkę z arkusza 
Excella. FPSpreadsheet dostarcza tylko funkcję do odczytu
ReadAsUTF8Text(Row, Col), a więc za jej pomocą próbuję:
l:= XLSM1.Worksheet.ReadAsUTF8Text(Row, Col);
gdzie l: string;

problem w tym, że excell był zapisywany przy użyciu CP1250, i wszędzie, 
gdzie w komórce występują polskie ogonki dostaję w wyniku "krzaki".

Jest na to jakaś metoda? Prośba o pomoc.
Pozdrawiam
JS
Re: Lazarys + FPSpreadsheet + polskie "ogonki"
#345439
Author: turbopascal60
Date: Sun, 18 Dec 2016 00:20
21 lines
1991 bytes
W dniu sobota, 17 grudnia 2016 20:10:53 UTC+1 użytkownik JS napisał:
> Witam,
> 
> 
> za pomocą FPSpreadsheet (v1.6.1) chcę odczytać komórkę z arkusza 
> Excella. FPSpreadsheet dostarcza tylko funkcję do odczytu
> ReadAsUTF8Text(Row, Col), a więc za jej pomocą próbuję:
> l:= XLSM1.Worksheet.ReadAsUTF8Text(Row, Col);
> gdzie l: string;
> 
> problem w tym, że excell był zapisywany przy użyciu CP1250, i wszędzie, 
> gdzie w komórce występują polskie ogonki dostaję w wyniku "krzaki".
> 
> Jest na to jakaś metoda? Prośba o pomoc.
> Pozdrawiam
> JS

1. Wczytać arkusz Excelem
2. Wyeksportować jako plik tekstowy CSV_CP1250
3. Przy pomocy Google wyszukać konwerter CP1250 ==> UTF8 i dokonać konwersji
4. Wczytać plik tekstowy CSV_UTF8 Excelem i zapisać go jako arkusz
Re: Lazarys + FPSpreadsheet + polskie "ogonki"
#345440
Author: JS
Date: Sun, 18 Dec 2016 08:57
31 lines
2103 bytes
W dniu 2016-12-18 o 01:20, turbopascal60@gmail.com pisze:
> W dniu sobota, 17 grudnia 2016 20:10:53 UTC+1 użytkownik JS napisał:
>> Witam,
>>
>>
>> za pomocą FPSpreadsheet (v1.6.1) chcę odczytać komórkę z arkusza
>> Excella. FPSpreadsheet dostarcza tylko funkcję do odczytu
>> ReadAsUTF8Text(Row, Col), a więc za jej pomocą próbuję:
>> l:= XLSM1.Worksheet.ReadAsUTF8Text(Row, Col);
>> gdzie l: string;
>>
>> problem w tym, że excell był zapisywany przy użyciu CP1250, i wszędzie,
>> gdzie w komórce występują polskie ogonki dostaję w wyniku "krzaki".
>>
>> Jest na to jakaś metoda? Prośba o pomoc.
>> Pozdrawiam
>> JS
>
> 1. Wczytać arkusz Excelem
> 2. Wyeksportować jako plik tekstowy CSV_CP1250
> 3. Przy pomocy Google wyszukać konwerter CP1250 ==> UTF8 i dokonać konwersji
> 4. Wczytać plik tekstowy CSV_UTF8 Excelem i zapisać go jako arkusz
>
Dzięki za poradę, ale nie wchodzi w grę.
-po pierwsze excella nie mogę ruszyć, bo korzystają z niego inne 
programy i nie mogą się wysypać,
-po drugie, tych excelli jest ze 2000 :-(
Może jakieś inne rozwiązanie?

Pozdrawiam
JS
Re: Lazarys + FPSpreadsheet + polskie "ogonki"
#345441
Author: TurboPascal
Date: Sun, 18 Dec 2016 09:36
7 lines
1642 bytes
Jest jeszcze prostszy sposób:

1. Funkcją do odczytu ReadAsUTF8Text(Row,Col) wczytać tekst.
2. Korzystając z  https://pl.wikipedia.org/wiki/Kodowanie_polskich_znak%C3%B3w  
   zastąpić w tekście jednobajtowe kody polskich znaków diakrytycznych CP-1250
   dwubajtowymi kodami UTF-8.
Re: Lazarys + FPSpreadsheet + polskie "ogonki"
#345442
Author: JS
Date: Sun, 18 Dec 2016 14:26
15 lines
1537 bytes
W dniu 2016-12-18 o 10:36, TurboPascal pisze:
>
> Jest jeszcze prostszy sposób:
>
> 1. Funkcją do odczytu ReadAsUTF8Text(Row,Col) wczytać tekst.
> 2. Korzystając z  https://pl.wikipedia.org/wiki/Kodowanie_polskich_znak%C3%B3w
>    zastąpić w tekście jednobajtowe kody polskich znaków diakrytycznych CP-1250
>    dwubajtowymi kodami UTF-8.
>
  No tak chyba zrobię, choć  w unicie lconvencoding jest cała masa 
konwerterów typu cp1250ToUTF8 (i inne), ale ni diabła mi to nie działa. 
Myślałem, że coś źle robię, stąd moje pytanie.

Pozdrawiam
JS
Re: Lazarys + FPSpreadsheet + polskie "ogonki"
#345443
Author: re
Date: Sun, 18 Dec 2016 20:50
35 lines
2715 bytes

Użytkownik "JS"


> Jest jeszcze prostszy sposób:
>
> 1. Funkcją do odczytu ReadAsUTF8Text(Row,Col) wczytać tekst.
> 2. Korzystając z 
> https://pl.wikipedia.org/wiki/Kodowanie_polskich_znak%C3%B3w
>    zastąpić w tekście jednobajtowe kody polskich znaków diakrytycznych 
> CP-1250
>    dwubajtowymi kodami UTF-8.
>
  No tak chyba zrobię, choć  w unicie lconvencoding jest cała masa
konwerterów typu cp1250ToUTF8 (i inne), ale ni diabła mi to nie działa.
Myślałem, że coś źle robię, stąd moje pytanie.
---
Bo bezsensowne jest najpierw traktowanie tekstu jako napisanego w UTF8 jak 
jest w CP1250 a następnie jako CP1250 jak już jest Utf8. Po prostu bzdury 
:-)

Można na wstępie próbować odwrócić błędną konwersję z UTF8, ale wcale nie 
jest pewne, że się to uda bo CP1250 może zawierać sekwencje, który w 
Unikodzie nie ma. I potem mając CP można prawidłowo przekonwertować do UTF8 
i przyczytać tą twoją pieprzoną funkcją.

Najrozsądniej byłoby konwertować całe dokumenty w locie i np z pamięci 
czytać (ew. plików tymczasowych w katalogu tymczasowym), ale też nie wiem o 
czym mowa bo kiedyś Excel był binarny, więc tylko te nowe formaty można 
traktować tekstowo chyba, że się właśnie poszczególne komórki analizuje a 
wtedy trzeba normalnej metody do ich pobierania a nie jako UTF-8, czyli po 
prostu inny komponent a jak inny komponent zdolny do czytania komórek to i 
wystarczy z niego korzystać a nie konwertować. Może po prostu poszukaj 
właściwej metody w tym co masz :-) 
Re: Lazarys + FPSpreadsheet + polskie "ogonki"
#345421
Author: mmm
Date: Mon, 19 Dec 2016 08:14
29 lines
2123 bytes
>  No tak chyba zrobię, choć  w unicie lconvencoding jest cała masa
> konwerterów typu cp1250ToUTF8 (i inne), ale ni diabła mi to nie działa.
> Myślałem, że coś źle robię, stąd moje pytanie.
>
> Pozdrawiam
> JS

Konwerter działa poprawnie jeżeli dane na wejsciu są zgodne z 
oczekiwaniami funkcji konwertującej!


W Twoim przypadku masz dwa wyjścia :
Rozwiazanie 1) Jeżeli masz "krzaczki" różne dla każdej litery z zakresu 
polskich znaków to możesz "odkodować" polskie znaki jakaś magiczna 
funkcją tylko nie koniecznie to bedzie "cp1250ToUTF8"  bo jezeli 
FPSpreadsheet zakładał ze jest UTF8 a to było coś innego to te PL znaki 
przesuneły sie w zupełnie inne miejsce niz powinny być !!!
I te rozwiązanie jest dość połowiczne.
Możesz wygenerować wszystkie znaki 0..255, wrzucić do excel-a , a potem 
napisać funkcję delphi która ustawi odpowiednio znaki !!!

Rozwiazanie 2)
Zrobić to dobrze i jeszcze wysłać patch do twórców komponentu.
Poprawić to na poziomie ReadAsUTF8Text,
bo może mozna odczytać kodowanie dokumentu/komórki i uzyć funkcji 
cp1250ToUTF8 tam gdzie ona powinna być użyta


M
Re: Lazarys + FPSpreadsheet + polskie "ogonki"
#345445
Author: JS
Date: Mon, 19 Dec 2016 17:20
40 lines
2618 bytes
W dniu 2016-12-19 o 09:14, mmm pisze:
>>  No tak chyba zrobię, choć  w unicie lconvencoding jest cała masa
>> konwerterów typu cp1250ToUTF8 (i inne), ale ni diabła mi to nie działa.
>> Myślałem, że coś źle robię, stąd moje pytanie.
>>
>> Pozdrawiam
>> JS
>
> Konwerter działa poprawnie jeżeli dane na wejsciu są zgodne z
> oczekiwaniami funkcji konwertującej!
>
>
> W Twoim przypadku masz dwa wyjścia :
> Rozwiazanie 1) Jeżeli masz "krzaczki" różne dla każdej litery z zakresu
> polskich znaków to możesz "odkodować" polskie znaki jakaś magiczna
> funkcją tylko nie koniecznie to bedzie "cp1250ToUTF8"  bo jezeli
> FPSpreadsheet zakładał ze jest UTF8 a to było coś innego to te PL znaki
> przesuneły sie w zupełnie inne miejsce niz powinny być !!!
> I te rozwiązanie jest dość połowiczne.
> Możesz wygenerować wszystkie znaki 0..255, wrzucić do excel-a , a potem
> napisać funkcję delphi która ustawi odpowiednio znaki !!!
>
> Rozwiazanie 2)
> Zrobić to dobrze i jeszcze wysłać patch do twórców komponentu.
> Poprawić to na poziomie ReadAsUTF8Text,
> bo może mozna odczytać kodowanie dokumentu/komórki i uzyć funkcji
> cp1250ToUTF8 tam gdzie ona powinna być użyta
>
>
> M
>
>
Dzięki za zainteresowanie tematem, ale jak pisałem wcześniej ingerencja 
w pliki excella nie wchodzi w grę. Poradziłem sobie metodą opisaną przez 
TurboPascal-a. Działa skutecznie, więc teoretycznie problemu już nie ma.
Podoba mi się pomysł, żeby w excellu zawrzeć tablicę kodową, ale to rada 
na przyszłość.

Pozdrawiam
JS
Re: Lazarys + FPSpreadsheet + polskie "ogonki"
#345446
Author: Roman Tyczka
Date: Tue, 20 Dec 2016 11:08
44 lines
2354 bytes
On Sat, 17 Dec 2016 20:10:54 +0100, JS wrote:

>  FPSpreadsheet dostarcza tylko funkcję do odczytu
> ReadAsUTF8Text(Row, Col)

Czyżby?

  public
    { Base methods }
    constructor Create;
    destructor Destroy; override;

    { Utils }
    class function CellInRange(ARow, ACol: Cardinal; ARange: TsCellRange): 
Boolean;
    class function CellPosToText(ARow, ACol: Cardinal): string;
//    procedure RemoveAllCells;
    procedure UpdateCaches;

    { Reading of values }
    function  ReadAsText(ARow, ACol: Cardinal): string; overload;
    function  ReadAsText(ACell: PCell): string; overload;
    function  ReadAsText(ACell: PCell; AFormatSettings: TFormatSettings): 
string; overload;
    function  ReadAsUTF8Text(ARow, ACol: Cardinal): string; overload; 
deprecated 'Use ReadAsText';
    function  ReadAsUTF8Text(ACell: PCell): string; overload; deprecated 
'Use ReadAsText';
    function  ReadAsUTF8Text(ACell: PCell; AFormatSettings: 
TFormatSettings): string; overload; deprecated 'Use ReadAsText';
    function  ReadAsNumber(ARow, ACol: Cardinal): Double; overload;
    function  ReadAsNumber(ACell: PCell): Double; overload;
    function  ReadAsDateTime(ARow, ACol: Cardinal; out AResult: TDateTime): 
Boolean; overload;
    function  ReadAsDateTime(ACell: PCell; out AResult: TDateTime): 
Boolean; overload;
    function  ReadFormulaAsString(ACell: PCell; ALocalized: Boolean = 
false): String;
    function  ReadNumericValue(ACell: PCell; out AValue: Double): Boolean;


-- 
pozdrawiam
Roman Tyczka
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads