@wotik - ale jest w ogóle jakiś konkretny powód, dla którego wolisz dużo uboższe kodowanie wykorzystać? Dla Lazarusa ( i oczywiście całego LCL) natywnym kodowaniem jest UTF-8 i ono zapewnia wsparcie pełnego zestawu znaków; Pełnego, a nie ASCII i trochę diakrytycznych czy łacińskich; Unikod od nastu lat to standard, więc nie ma sensu upośledzać aplikacji tylko dlatego, że parę bajtów więcej znajdzie się w pliku; Poza tym UTF-8 nie będzie zależne od lokalnej strony kodowej, więc i uniwersalne;
Kodowanie w pliku to pewnie UTF8, a Excel domyślnie odczytuje to pewnie w CP1250. Jest jakiś sposób na zapis takiego pliku w CP1250, ew. może macie jakiś inny pomysł, bo kombinuję już kilka dni i nie mogę nic sensownego wymyślić...
Tak, kodowanie to na pewno UTF-8, jeśli w kodzie nie wykonywałeś konwersji;
Być może Excel nie próbuje wyświetlać zawartości pliku w jego kodowaniu, dlatego że potrzebuje do tego znacznika BOM; Spróbuj więc dodać ten znacznik na początku pierwszej linii i wtedy wczytać plik do arkusza:
const
UTF8_BOM_SIGNATURE = UTF8String(#239#187#191);
var
slCSV: TStringList;
begin
{ utworzenie listy, uzupełnienie jej danymi w odpowiedniej strukturze }
slCSV[0] := UTF8_BOM_SIGNATURE + slCSV[0];
slCSV.SaveToFile({nazwa pliku});
end;
Spróbuj tak - może w tym diabeł tkwi;
Jeszcze jedna mała uwaga co do tej linijki:
csv.SaveToFile(SaveDialog1.FileName + '.csv');
Jeżeli użytkownik wpisze w polu okna dialogowego tylko nazwę pliku, czyli np. my file
, to właściwość FileName
zwróci pełną ścieżkę pliku w postaci np. C:\my file.csv
; Natomiast jeżeli poda nazwę pliku razem z rozszerzeniem, np. my file.csv
to Twój kod niepotrzebnie doda rozszerzenie i wyjdzie np. C:\my file.csv.csv
;
Najpierw powinieneś sprawdzić czy faktycznie na końcu ciągu z właściwości FileName
znajduje się docelowe rozszerzenie i jeśli nie to je zmienić lub dodać;
I jeszcze jedna mała uwaga - istnieją gotowe biblioteki dla Lazarusa do obsługi plików CSV, więc poszukaj sobie w takiej, pobierz i używaj; Tam zapewne jest wszystko oprogramowane tak, że nie będzie problemu z kodowaniem pod Excelem.