Announcement

Collapse
No announcement yet.

Russische Zeichen aus Excel lesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Russische Zeichen aus Excel lesen

    Hallo zusammen,

    ich habe das folgende Problem:
    ich lese automatisiert Texte aus einer Excel-Datei. Bei deutschen Texte funktioniert das problemlos, aber bei russischen kommt nur "Müll" heraus.

    Hier mal ein Stück Quellcode:

    HTML Code:
    procedure TForm1.cb_readClick(Sender: TObject);
    var s_ExcelFile: string;
        s: WideString;
        sl: TStringList;
        i: integer;
        Excel: Excel97.TExcelApplication;
        Workbook: Excel97.TExcelWorkbook;
        Worksheet: Excel97._Worksheet;
        Range: Excel97.Range;
    begin
    
      s_ExcelFile := ExtractFilePath(Application.ExeName) + 'Files\input.xls';
    
      // Excel-Verbindung erstellen
      Excel := TExcelApplication.Create(nil);
      Excel.Connect;
    
      Workbook := TExcelWorkbook.Create(nil);
      Workbook.ConnectTo(Excel.WorkBooks.Add(s_ExcelFile, 0));
      WorkSheet:= Workbook.Sheets.Item[1] as _WorkSheet;
    
      sl := TStringList.Create;
    
      try
    
        for i:=1 to Worksheet.Rows.Count do
        begin
          Range := Worksheet.Range['A' + IntToStr(i), 'A' + IntToStr(i)];
    
          s := Range.Value;
    
          if s = '' then
            break;
    
          sl.Add(s);
        end;
    
      finally
        // Excel-Verbindung trennen
        Excel.Quit;
        Excel.Disconnect;
        Excel := nil;
      end;
    
      // Texte in Textdatei speichern
      sl.SaveToFile(ExtractFilePath(Application.ExeName) + 'Files\output.txt');
    
    end;
    Im Debugger (Auswerten/Ändern-Dialog) kann man erkennen, dass in Range.Value noch eine Zeichenfolge drin steht (z.B. K204DK>24>FC:I3K2O6L0M6G2FC), die aber macht keinen Sinn. In Variable s stehen dann nach der Zuweisung nur noch Fragezeichen.
    Muss ich Range.Value irgendwie konvertieren? Wenn ja, wie?

    Komm hier einfach nicht weiter und wäre für eure Tipps sehr dankbar.


    Gruß Andy

  • #2
    Welche Delphi-Version? Der Debugger kann in älteren Delphi-Versionen kein Unicode, so das in s noch was richtiges sein kann aber spätestens deine Nicht-Unicode TStringList alles kaputt macht.

    Comment


    • #3
      Danke für die schnelle Antwort!

      Ich arbeite mit Version 5, also schon etwas eingestaubt...

      Heißt das, Excel liefert immer Unicode zurück, oder nur bei anderen Schriftsätzen? Wie gesagt, mit deutschen Texten hatte ich bisher keine Probleme.

      Die StringList habe ich eben nur als Beispiel verwendet. Nach dem Einlesen aus der Excel-Datei will ich die Texte eigentlich in eine DBISAM-Tabelle schreiben.
      Hab das eben mal getestet, in der DBISAM-Tabelle kommen auch nur Fragezeichen an...

      Comment


      • #4
        DBISAM? Kann denn die DB bzw. dein Zugriffsweg Unicode? Ich vermute nein.

        Comment


        • #5
          Nein, diese Version von DBISAM kann kein Unicode.
          D.h. ich muss die Unicode-Quelldaten vorher in den russischen Zeichensatz konvertieren, den die DBISAM-Tabelle erwartet, oder?
          Wie kann ich das anstellen?

          Comment


          • #6
            D.h. ich muss die Unicode-Quelldaten vorher in den russischen Zeichensatz konvertieren, den die DBISAM-Tabelle erwartet, oder?
            Kann schon sein. Ich verwende nur noch Unicode-Fähige DB's bzw. verwende UTF8 zur speicherung.

            Wie kann ich das anstellen?
            In der UnicodeLibrary sind einige Konvertierungsfunktionen vorhanden.

            Comment


            • #7
              Super, danke für den Tipp!
              Werde das mal ausprobieren und mich dann wieder melden.

              Comment


              • #8
                Juhu, jetzt hat's endlich geklappt!

                Mit der Funktion UTF16ToEncoding aus der von dir genannten UnicodeLibrary konvertiere ich nun die Werte aus der Excel-Datei in den Zeichensatz Windows 1251 (Kyrillisch), und anschließend kann ich sie ganz normal in die DBISAM-Tabelle schreiben.

                Vielen Dank Bernhard für deine Hilfe!

                Comment

                Working...
                X