Thread View: pl.comp.lang.delphi
9 messages
9 total messages
Started by JS
Sat, 17 Dec 2016 19:10
Lazarys + FPSpreadsheet + polskie "ogonki"
Author: JS
Date: Sat, 17 Dec 2016 19:10
Date: Sat, 17 Dec 2016 19:10
15 lines
1310 bytes
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"
Author: turbopascal60
Date: Sun, 18 Dec 2016 00:20
Date: Sun, 18 Dec 2016 00:20
21 lines
1991 bytes
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"
Author: JS
Date: Sun, 18 Dec 2016 08:57
Date: Sun, 18 Dec 2016 08:57
31 lines
2103 bytes
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"
Author: TurboPascal
Date: Sun, 18 Dec 2016 09:36
Date: Sun, 18 Dec 2016 09:36
7 lines
1642 bytes
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"
Author: JS
Date: Sun, 18 Dec 2016 14:26
Date: Sun, 18 Dec 2016 14:26
15 lines
1537 bytes
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"
Author: re
Date: Sun, 18 Dec 2016 20:50
Date: Sun, 18 Dec 2016 20:50
35 lines
2715 bytes
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"
Author: mmm
Date: Mon, 19 Dec 2016 08:14
Date: Mon, 19 Dec 2016 08:14
29 lines
2123 bytes
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"
Author: JS
Date: Mon, 19 Dec 2016 17:20
Date: Mon, 19 Dec 2016 17:20
40 lines
2618 bytes
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"
Author: Roman Tyczka
Date: Tue, 20 Dec 2016 11:08
Date: Tue, 20 Dec 2016 11:08
44 lines
2354 bytes
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