Re: paar Excel Fragen
Verfasst: Fr, 28. Aug 2009 11:09
Das deutschsprachige Forum für Entwickler in der Xbase-Welt, ein Angebot des Deutschsprachige Xbase-Entwickler e. V.
https://xbaseforum.de/
klappt nicht mit den chinesischen Zeichen ...Koverhage hat geschrieben:Ich glaube da must Du auf kostenplichtige Tools zurückgreifen.
http://smartpdfconverter.de/?gclid=CNXU ... zAodLl_TJA
Str2Unicode() ... das ist doch in der SL1 v1.9.355 ... aber wo ... ?Günter Beyes hat geschrieben:da Excel eine Unicode-Anwendung ist, versuche doch mal aus deinem Programm heraus das Excel-Sheet mit Unicode-Strings zu füttern.
Wenn du einen Xbase++ - String hast, kannst du den mit Str2Unicode() in einen Unicode-String umwandeln. In wie weit das im konkreten Fall funktioniert, kannst du kontrollieren, indem du das Ergebnis in eine Datei schreibst und per Hex-Editor, oder visuell per Notepad unter Arial Unicode MS, mit dem Sollwert vergleichst. Diesen liefert dir ebenfalls Notepad, indem du die gewünschte Zeichenfolge eingibst (oder per cut and paste einfügst) und als Unicode abspeicherst.
Re: Unicode Displaying and entering, public.xbase++.gui, 6. Oktober 2008
> In the latest SL1 you can see some definitions for the DDL level
> #define XPP_WIDECHAR (0x00000200)
> #define XPP_WIDEMEMO (XPP_WIDECHAR+XPP_ST_LARGE)
> #define XPP_VARWIDECHAR (XPP_WIDECHAR+XPP_ST_VARSIZE)
> probably they have extend this also to the runtime level.
This is already #defined in Types.ch of Xbase++ 1.9
I'm eagerly waiting that the compiler understands this:
#define XPP_SEQUENCE (0x00000400)
#define XPP_POINTER (0x00000800)
#define XPP_TIME (0x00001000)
#define XPP_TIMESTAMP (0x00002000)
#define XPP_TIMESPAN (0x00004000)
#define XPP_GUID (0x00008000)
> In SL1 you also can see some new functions
> IsUnicode( <cString> ) --> lIsUnicode
> Str2Unicode( <cString> ) --> cuString
> Unicode2Str( <cuString>] ) --> cString
These are limited wrappers for the WideCharToMultiByte() and
MultiByteToWideChar() APIs. Function IsUniCode() is two lines of PRG code:
FUNCTION IsUniCode( cString )
RETURN ( Valtype(cString) == "C" .AND. Len( cString ) >=2 .AND. cString[-1]
== Chr(0) )
I don't think that this justifies the hope for full UNICODE support with the
Xbase++ compiler.
> I think the next logical step will be use the unicode APIs that will
> allow loseless conversions from Oem or Ansi charsets
IMO, this requires Alaska to change the Xbase++ kernel from SBCS to MBCS.
Alaska doesn't have the manpower to accomplish this.
uuuuuuffff ... viel Stuff zum lesen.Günter Beyes hat geschrieben: Dieser Artikel aus der Sicht von Visual Foxpro -- Using Unicode in Visual FoxPro Web and Desktop Applications,
http://www.west-wind.com/presentations/ ... nicode.asp -- ist in diesem Zusammenhang interessant. Die haben (oder hatten, wie man will) als Nicht-Unicode-Enwicklungstool die gleichen Probleme wie aktuell Xbase++ .
aber vermutlich nur in der Version mit "neuen Features" ... in meiner Hilfe stehts jedenfalls ganz normal drin.Str2Unicode() - Konvertiert eine OEM/ANSI/ASCII in eine Unicode Zeichenkette [Vorübergehende Dokumentation]
...
und die Parameter ?brandelh hat geschrieben:also bei mir stehtaber vermutlich nur in der Version mit "neuen Features" ... in meiner Hilfe stehts jedenfalls ganz normal drin.Str2Unicode() - Konvertiert eine OEM/ANSI/ASCII in eine Unicode Zeichenkette [Vorübergehende Dokumentation]
...
Allerdings ist das NUR für Programme die auch UNICODE Parameter erwarten !
Code: Alles auswählen
aExcel[PosKG] [myGEWICHT] := "=SUMME(D4:K4)" // German SUMME
Code: Alles auswählen
oSheet:Columns( nNumber ):ColumnWidth := 5.5 (mm)
Code: Alles auswählen
oSheet:Columns("A"):HorizontalAlignment := xlLeft
oSheet:Columns("F"):HorizontalAlignment := xlRight
Code: Alles auswählen
5 Zeilen Font etc. setzen
* i := 1
* FOR i := 1 TO 5
* cZeile := LTRIM(STR(i))
* DO CASE
* CASE i = 1
* oSheet:range( "A"+cZeile+":J"+cZeile ):Font():Size := 18
* CASE i = 2
* oSheet:range( "A"+cZeile+":J"+cZeile ):Font():Size := 14
* CASE i = 3
* oSheet:range( "A"+cZeile+":J"+cZeile ):Font():Size := 14
* CASE i = 4
* oSheet:range( "A"+cZeile+":J"+cZeile ):Font():Size := 14
* CASE i = 5
* oSheet:range( "A"+cZeile+":J"+cZeile ):Font():Size := 14
* ENDCASE
*
* oSheet:range( "A"+cZeile+":J"+cZeile ):Font():Name := "Times" /
* oSheet:range( "A"+cZeile+":J"+cZeile ):Font():Bold := .t.
* NEXT
oZeile := oSheet:range( "A1:J1" ):Font()
oZeile:Size := 18 //Schriftgrösse ändern
oZeile:Name := "Times" //Schrift festlegen
oZeile:Bold := .T.
oZeile := oSheet:range( "A2:J5" ):Font()
oZeile:Size := 14 //Schriftgrösse ändern
oZeile:Name := "Times" //Schrift festlegen
oZeile:Bold := .T.
Code: Alles auswählen
Array mit Zeilennummern von Überschriften deren Font geändert werden soll
//
// later use Macro
//
cRange := ""
//
// Array Number Header-Line
//
i := 1
iMax := LEN(aHeaderLine)
//
FOR i := 1 TO iMax
cZeile := LTRIM(STR(aHeaderLine[i]))
*
* old Version did it Line-by-Line ... "very slow"
*
* oZeile := oSheet:range( "A"+cZeile+":J"+cZeile ):Font()
cRange := cRange+"A"+cZeile+":J"+cZeile
//
// seem there is a limitation in LEN(cRange) about 256 ???
// when using RANGE() ?!
//
IF LEN(cRange) > 256-16
//
// now use macro &(cRange)
//
cRange := CHR(34)+cRange+CHR(34)
oSheet:range( &(cRange) ):Font():Size := 18
oSheet:range( &(cRange) ):Font():Name := "Times"
oSheet:range( &(cRange) ):Font():Bold := .t.
//
// reset
cRange := ""
ELSE
IF i <> iMax
//
// add "Komma" .. this is what help file say, BUT
// ist does NOT work ( German OS() ? ) so i try
// & Error until it works with ";"
//
cRange := cRange+";"
ELSE
//
// now use macro &(cRange)
//
cRange := CHR(34)+cRange+CHR(34)
oSheet:range( &(cRange) ):Font():Size := 18
oSheet:range( &(cRange) ):Font():Name := "Times"
oSheet:range( &(cRange) ):Font():Bold := .t.
ENDIF
ENDIF
NEXT
Code: Alles auswählen
Worksheets("Sheet1").Activate
Range(Cells(1, 1), Cells(5, 3)).Font.Italic = True
Code: Alles auswählen
Set t = Sheet1.CommandButton1.TopLeftCell
With ActiveWindow
.ScrollRow = t.Row
.ScrollColumn = t.Column
End With
Ich habe mal Frontpage gestartet und die Excel Tabelle eingefügt. Das hat er an den Stellen Da ist also ein "Viereck" bei den entsprechenden Artikel ... was ist das ?Martin Altmann hat geschrieben:Opera:IE:
Code: Alles auswählen
Pseudocode:
// Umlaute in UFT-16 kodiert
aUmlaut := { chr( 0xE4 ) + chr( 0 ) ,; // ä
chr( 0xF6 ) + chr( 0 ) ,; // ö
chr( 0xFC ) + chr( 0 ) ,; // ü
chr( 0xC4 ) + chr( 0 ) ,; // Ä
chr( 0xD6 ) + chr( 0 ) ,; // Ö
chr( 0xDC ) + chr( 0 ) } // Ü
// ae, oe, ue, Ae Oe, Ue in UFT-16 kodiert
aErsatz := { chr( 0x61 ) + chr( 0 ) + chr( 0x65 ) + chr( 0 ) ,; // ae
chr( 0x6F ) + chr( 0 ) + chr( 0x65 ) + chr( 0 ) ,; // oe
chr( 0x75 ) + chr( 0 ) + chr( 0x65 ) + chr( 0 ) ,; // ue
chr( 0x41 ) + chr( 0 ) + chr( 0x65 ) + chr( 0 ) ,; // Ae
chr( 0x4F ) + chr( 0 ) + chr( 0x65 ) + chr( 0 ) ,; // Oe
chr( 0x55 ) + chr( 0 ) + chr( 0x65 ) + chr( 0 ) } // Ue
// wie bei Notepad
cUTF16_Marker := chr( 0xFF ) + chr( 0xFE )
cCSV := ""
// Daten lesen
go top
do while ! eof()
for i := 1 to fcount()
cCSV += var2char( fieldget( i ) )
if i < fcount()
cCSV += ","
endif
next
cCSV += chr(13)+chr(10) // CRLF
dbskip()
enddo
// in Unicode umwandeln
cCSV := Str2Unicode( cCSV )
// Ersatz-Umlaute durch richtige Umlaute ersetzen
for i := 1 to len( aErsatz )
cCSV := strtran( cCSV, aErsatz[i], aUmlaut[i] )
next
// CSV-Datei schreiben
// nicht mit memowrit() wegen EOF-Zeichen ^Z
// dabei UTF16-Marker vorsetzen
hFile := fcreate( "output.csv" )
fwrite( hFile, cUTF16_Marker + cCSV )
fclose( hFile )
// output.csv mit Excel importieren
Danke, ich werde das mal ausprobieren.Günter Beyes hat geschrieben:versuch mal deine Daten im CSV-Format zu exportieren, dieses in Unicode umzuwandeln, dann deine Ersatz-Umlaute wie ae, oe, ue durch richtige Umlaute zu ersetzen und die Datei dann mit Excel zu importieren.
uuuuuufff ... dann müsste ich mir auch noch O.O.C. activeX reinziehen ...Günter Beyes hat geschrieben:falls Excel Probleme bereiten sollte, probier mal Open Office Calc.
WowGünter Beyes hat geschrieben:Und um eine chinesisch-sprachige Anwendung auf einem nicht-chinesischen Windows auszuführen, probiere mal die AppLocale-Utility, http://www.microsoft.com/globaldev/tools/apploc.mspx.