paar Excel Fragen

Einbindung von Office-Komponenten wie Word, Excel usw.

Moderator: Moderatoren

Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: paar Excel Fragen

Beitrag von Koverhage »

Gruß
Klaus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: paar Excel Fragen

Beitrag von AUGE_OHR »

Koverhage hat geschrieben:Ich glaube da must Du auf kostenplichtige Tools zurückgreifen.
http://smartpdfconverter.de/?gclid=CNXU ... zAodLl_TJA
klappt nicht mit den chinesischen Zeichen ... :(
gruss by OHR
Jimmy
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Re: paar Excel Fragen

Beitrag von Günter Beyes »

Hallo Jimmy,

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.

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++ .

Gruß,
Günter
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: paar Excel Fragen

Beitrag von AUGE_OHR »

hi,
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.
Str2Unicode() ... das ist doch in der SL1 v1.9.355 ... aber wo ... ?

in der Hilfe finde ich nichts ... aber es gibt ja eine "neue" DLL bei SL1 die XPPSYS.DLL welche
ja aus den Sourcen besteht wozu auch C:\ALASKA\XPPW32\Source\SYS\activex.prg gehört.

ok das werde ich mal ausprobieren, aber ich habe im Alaska Forum dazu auch eine "andere" Msg gefunden
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.
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++ .
uuuuuuffff ... viel Stuff zum lesen.

Danke für deine Tips, mal sehen wie ich die umsetzten kann
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: paar Excel Fragen

Beitrag von brandelh »

Hi,

also bei mir steht
Str2Unicode() - Konvertiert eine OEM/ANSI/ASCII in eine Unicode Zeichenkette [Vorübergehende Dokumentation]
...
aber vermutlich nur in der Version mit "neuen Features" ... in meiner Hilfe stehts jedenfalls ganz normal drin.
Allerdings ist das NUR für Programme die auch UNICODE Parameter erwarten !
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: paar Excel Fragen

Beitrag von AUGE_OHR »

brandelh hat geschrieben:also bei mir steht
Str2Unicode() - Konvertiert eine OEM/ANSI/ASCII in eine Unicode Zeichenkette [Vorübergehende Dokumentation]
...
aber vermutlich nur in der Version mit "neuen Features" ... in meiner Hilfe stehts jedenfalls ganz normal drin.
Allerdings ist das NUR für Programme die auch UNICODE Parameter erwarten !
und die Parameter ?

ich habe ja "nur" die SL1 v1.9.355 ohne "visual Style" ... ob es da einen Unterschied gibt ?
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: paar Excel Fragen

Beitrag von AUGE_OHR »

so heute mal paar Tips

das man ein ganze Array an Excel übergeben kann wissen wohl viele, aber das Array kann "mehr"
enthalten als "nur" Daten.

Code: Alles auswählen

aExcel[PosKG] [myGEWICHT] := "=SUMME(D4:K4)" // German SUMME
ist eine "Formel" die ich ebenfalls im Array an Excel übergeben kann.

Code: Alles auswählen

oSheet:Columns( nNumber ):ColumnWidth   :=  5.5 (mm)
zum setzten den Spaltenbreite ist wohl bekannt, aber man kann mit :Columns() auch noch andere Sachen machen.

Code: Alles auswählen

oSheet:Columns("A"):HorizontalAlignment := xlLeft
oSheet:Columns("F"):HorizontalAlignment := xlRight
Reihe A wird nach links ausgerichtet und Reihe F nach rechts.

allgemein : wenn man was mit einer ganzen Spalte machen will nimmt man :Columns()
dito das selbe mit :Rows()

hier noch paar :Range() Optimierungen

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.
die "alte" Version hat es "sehr langsam" Zeile-für-Zeile gemacht, aber :Range() macht es "in einem Rutsch"

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
also im help file "C:\Programme\Microsoft Office\Office10\1031\VBAXL10.CHM" steht zwar "Komma", aber das funktioniert nicht ?
ich habe dann alles mögliche ausprobiert und mit dem ";" Semikolon ging es dann


Frage : wie "übersetzt" mann das ?

Code: Alles auswählen

Worksheets("Sheet1").Activate
Range(Cells(1, 1), Cells(5, 3)).Font.Italic = True
... er meldet "fehlende Function Cell()" ... ist ja auch eine Methode.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: paar Excel Fragen

Beitrag von AUGE_OHR »

unter "Verwenden von ActiveX-Steuerelementen in Tabellenblättern" hab ich das gefunden wobei es mir um der "Bildlauf"

Code: Alles auswählen

Set t = Sheet1.CommandButton1.TopLeftCell
With ActiveWindow
    .ScrollRow = t.Row
    .ScrollColumn = t.Column
End With
die Frage hier ist "was" ist das ActiveWindow ? oExcel:Application:???
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: paar Excel Fragen

Beitrag von AUGE_OHR »

hi,
Martin Altmann hat geschrieben:Opera:
Der Dateianhang Screen2.JPG existiert nicht mehr.
IE:
Der Dateianhang Screen.JPG existiert nicht mehr.
Ich habe mal Frontpage gestartet und die Excel Tabelle eingefügt. Das hat er an den Stellen
HTML_ECK.JPG
HTML_ECK.JPG (28.55 KiB) 8298 mal betrachtet
Da ist also ein "Viereck" bei den entsprechenden Artikel ... was ist  das ?
gruss by OHR
Jimmy
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Re: paar Excel Fragen

Beitrag von Günter Beyes »

Hi Jimmy,

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.

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
Gruß,
Günter
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: paar Excel Fragen

Beitrag von AUGE_OHR »

hi,
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.
Danke, ich werde das mal ausprobieren.
gruss by OHR
Jimmy
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Re: paar Excel Fragen

Beitrag von Günter Beyes »

Hi Jimmy,

falls Excel Probleme bereiten sollte, probier mal Open Office Calc.

Gruß, Günter
OOoCalc.PNG
OOoCalc.PNG (12.76 KiB) 8242 mal betrachtet
Unicode-CSV-Datei
test UTF-16.zip
(164 Bytes) 280-mal heruntergeladen
Notepad.PNG
Notepad.PNG (5.57 KiB) 8245 mal betrachtet
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: paar Excel Fragen

Beitrag von AUGE_OHR »

Günter Beyes hat geschrieben:falls Excel Probleme bereiten sollte, probier mal Open Office Calc.
uuuuuufff ... dann müsste ich mir auch noch O.O.C. activeX reinziehen ... :help:

naja bis Freitag hätte ich ja Zeit um was vorzubereiten ... bevor ich mir das Notebook holen kann.

danke auf jeden Falle für deine Bemühungen und Ideen :thumbright: , mal sehen wie ich das "Puzzle" zusammen bekomme.
gruss by OHR
Jimmy
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Re: paar Excel Fragen

Beitrag von Günter Beyes »

Hallo Jimmy,

ob Excel das genau so kann wie Open Office, weiß ich nicht. Probiere es aus. Du kannst auf einem deutschen Windows unter Systemsteuerung / Regions- und Sprachoptionen / Sprachen die Unterstützung für ostasiatische Sprachen installieren und dann mit dem deutschen Excel versuchen, obige CSV-Datei zu öffnen. Wenn das so aussieht wie erwartet, brauchst du Open Office hier nicht.

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. Die erspart dir den Neustart des Rechners, wenn du die Sprache für Nicht-Unicode-Anwendungen in der Systemsteuerung veränderst. Das heißt, sie simuliert für die Anwendung ein System mit der gewünschten System-Codepage.

Gruß,
Günter
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: paar Excel Fragen

Beitrag von AUGE_OHR »

Gü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.
Wow
wo gräbst du nur solche Sachen aus ... ja das scheint genau mein "Problem" zu treffen.

ich kann mich nur bedanken für deine Hilfe :thumbright: ohne die ich oft gar nicht weiter käme.

melde mich mit dem Thema zurück sobald ich weiter Ergebnisse habe (Wochenende)
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: paar Excel Fragen

Beitrag von AUGE_OHR »

hi,

normalerweise arbeite ich auf dem Sheet 1, wie bekomme ich Daten von Sheet1 auf Sheet 2 ?

es gibt doch bei Excel so was wie "Kommentare" ... wie "erkenne" ich die und wie komme ich da "ran" ?

da ich das mit dem "Kommentar" nicht weiss die Zusatz Frage ob pro Excel "Cell" immer nur ein VALTYPE() vorkommt ?
gruss by OHR
Jimmy
Antworten