Lazarus 3.2 (2024.02.28.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Excel OLE exportnál kínai karakterek jelennek meg. 2016 máj. 05 06:53 #1987

  • robotech
  • robotech profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 28
  • Köszönetek: 0
Ez egy nagyon jó összefoglaló volt , köszönöm szépen!

Minden benne van, ami szombat óta fejtörést okozott!!! Ezt így összefoglalva még angol nyelvű oldalakon sem találtam meg.

Excel OLE exportnál kínai karakterek jelennek meg. 2016 máj. 04 11:28 #1986

  • JohnnyK
  • JohnnyK profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 78
  • Köszönetek: 16
OLE segítségével tudsz PDF-ben elmenteni egy Excel fájlt PDF nyomtatók nélkül is így:
const  xlTypePDF = 0;
       xlTypeXPS = 1;
begin
 // ... itt kell elkészíteni az Excelt
XLApp.ActiveWorkbook.ExportAsFixedFormat(xlTypePDF, aVariant); // ahol pl az aVariant = 'c:\......\kimenet.pdf'
end; 
Nyomtatni pedig csak a Windows alapértelmezett nyomtatóra lehetett nálam. Először is ki kell derítened, hogy milyen néven jegyzi a rendszered a nyomtatóidat:
var WinDefaultPrinter: string;
WinDefaultPrinter := String(XLApp.ActivePrinter);
Ha a Vezérlőpultban egyesével állítgatom a default nyomtatókat, akkor a következő értékeket kaptam vissza a WinDefaultPrinter értékeként:
  • PrimoPDF a(z) Ne00 kimeneten
  • Microsoft XPS Document Writer a(z) Ne01 kimeneten
  • HP LaserJet 1200 Series PCL 5 a(z) Ne02 kimeneten
  • ...
Innen ki tudod választani, hogy melyikre lesz szükséged, és a programból a jelzett hibaüzenet nélkül meg tudod adni, hogy melyik nyomtatódra nyomtasson:
var OldPrinter: OleVariant;
begin
  OldPrinter := XLApp.ActivePrinter; // lemented a jelenlegi windows default nyomtatót
  XLApp.ActivePrinter := OleVariant('HP LaserJet 1200 Series PCL 5 a(z) Ne02 kimeneten');
  XLApp.ActiveWorkbook.ActiveSheet.PrintOut;
  XLApp.ActivePrinter := OldPrinter;  // visszaállítod a windows default nyomtatót
end;
Megköszönték: robotech

Excel OLE exportnál kínai karakterek jelennek meg. 2016 máj. 04 07:10 #1985

  • robotech
  • robotech profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 28
  • Köszönetek: 0
Üdv!

Köszönöm a Variant-tal kapcsolatos tippet!
Ki gondolta volna, hogy ez ilyen furmányos? :-)

Sőt!

lentebb írtam hogy:
"
ha módosítottam a program sorát:
XLApp.Cells[1,1].Value:=UTF8decode(edit2.text);

akkor futás idóben SIGSEGV hibával kifagy.
"
Szóval aztán ezzel nem is kísérleteztem tovább, pedig mint kiderült ez is megoldást hozott, csakhogy az UTF8decode függvényt így nem engedte használni, hanem be kellett tennem egy külön function-ba:

Function StrToWidestr(aString: String): WideString;
begin
Result:= UTF8Decode(aString);
end;

És akkor már így működött:
XLApp.Cells[2,1].Value :=StrToWidestr(edit2.text) ;

Különben ezt sem értem, hogy miért van így...

Az a Baj a LAZreport megoldással, hogy akkor az egyébként jól megformázott, és nyomtatásra teljesen alkalmas Excel táblát Lazreportsban újra meg kell 'rajzolni' vagy hogy is írjam, szóval a nyomtatást be kell állítani...ez azért elég sok munkával járna... mindenképpen OLE-val szeretnék nyomtatni, csak éppen nem tudok nyomtatót választani (két nyomtatóra is el kell küldeni, egy PDF nyomtatóra, és egy valódi nyomtatóra is).
az application.ActivePrinter:='NovaPDF' parancs nem működik... hibát ad vissza..

Excel OLE exportnál kínai karakterek jelennek meg. 2016 máj. 03 18:18 #1984

  • JohnnyK
  • JohnnyK profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 78
  • Köszönetek: 16
Ha esetleg mégsem az OLE-t használnád majd, akkor a PDF-esítéssel kapcsolatban olyan ötletem merült fel, hogy egy LazReport-t kellene készíteni, amit lehet exportálni pdf-be is (pdfexport addon), illetve elvileg látok olyan lehetőséget is, hogy spreadsheet-be (lrspreadsheetexport addon).
A wikipedián úgy olvasom, hogy az fpspreadsheet önmagában még nem alkalmas nyomtatásra, de amilyen ütemben fejlődött a komponens az utóbbi két évben, talán nem kell rá sokat várni :)

Excel OLE exportnál kínai karakterek jelennek meg. 2016 máj. 03 13:44 #1983

  • JohnnyK
  • JohnnyK profilkép
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 78
  • Köszönetek: 16
OLE témakörre kicsit visszatérve: reprodukálni tudtam a kínai karaktereket Win7, x32, Lazarus 1.6. Viszont, ha az átadni kívánt szövegeket betöltöd egy Variant változóba, majd erre a változóra hivatkozol az TEdit.Text helyett, akkor működni fog, még magyar ékezetekkel is:
var   XLApp: OLEVariant;
      aVariant: Variant;
begin
  XLApp := CreateOleObject('Excel.Application'); // requires comobj in uses
  try
    XLApp.Visible := True;
    XLApp.DisplayAlerts := False;
    XLApp.Workbooks.Add;
    aVariant := Edit2.Text;  // A1 cellába beírandó érték
    XLApp.Cells[1,1].Value := aVariant;
    aVariant := Edit1.Text; // mentés útvonala
    XLApp.ActiveWorkbook.SaveAs(aVariant, 51);
  finally
    XLApp.Quit;
    XLApp := Unassigned;
  end;
end;
Megköszönték: robotech

Excel OLE exportnál kínai karakterek jelennek meg. 2016 máj. 02 14:29 #1982

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
A lazfpspreadsheet.lpk a futásidőben használatos komponenseket tartalmazza. Tisztán futásidejű (Run-time) komponenseket nem kell/lehet telepíteni, elegendő a projekthez szükséges csomagként megadni a projekt felügyelőben.
A laz_fpspdreadsheet_visual.lpk a komponenspalettán helyezi el az ablakok tervezéshez használatos komponensek ikonjait. Csak tervezési csomagokat kell/lehet telepíteni.
A laz_fpspreadsheet_export_visual. lpk pedig adatkészletek (DataSet) adatainak exportálását teszi lehetővé az FPSpreadSheet által betölthető formátumba (Lásd például: itt ). Telepítése után az ikon a "Data Export" fülön lesz megtalálható.

Ha a pdf nyomatót eléred a normál nyomtatók között akkor nem kell pdf-be exportálnod, hiszen ezt teszi a nyomtató amikor nyomtatsz. Egy pdf nyomatóra ugyanúgy nyomtathatsz mint bármilyen más nyomtatóra.
Ajánlom elolvasásra a Printers unit leírását, a Nyomtató használata című írást a wiki-n.
Továbbá itt a fórumon is gyakori téma a nyomtatás ...
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Excel OLE exportnál kínai karakterek jelennek meg. 2016 máj. 01 18:32 #1980

  • robotech
  • robotech profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 28
  • Köszönetek: 0
Hahó!

Köszönöm a jó tippet a FPspreadsheettel kapcsolatban!
Feltettem a Lazarus 1.6-ot , amivel multkor nem volt szerencsém mert a Cportlib 10 nem ment fel rá, (ezt igen sokat használom) , viszont most ez is minden gond nélkül felment!

Feltettem az FPSpreadsheet-et is , csak egy kérdésem van:
3 db lpk volt benne, a

lazfpspreadsheet.lpk-t nem lehetett telepíteni, de aztán
laz_fpspdreadsheet_visual.lpk telepítésénél írta, hogy az előző is települ, de

a laz_fpspreadsheet_export_visual. lpk -val mi a teendő? azt külön kell telepíteni? egyébként ez mit tartalmaz?

Ezzel kapcsolatban ha még egy kérdésem lehetne:
a kiexportált xls filet PDF-ben is kell menteni... lenne erre valami ötlet?

OLE automatizmusnál úgy gondoltam adok neki nyomtatás parancsot miközben a default printer az egy pdf printer... de itt hogy lehetne ezt megtenni?

Egyébként a speciális magyar karaktereket is jól kezeli!!!

Excel OLE exportnál kínai karakterek jelennek meg. 2016 máj. 01 14:15 #1979

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
Az általad használt Lazarus 1.2 változat több mint két éves. Az eltelt idő alatt sok fontos változás történt, egyebek mellett a karakterkódolások kezelésével kapcsolatban is.
Ha frissíted a Lazarus-t és nélkülözhetők a ComObj eljárásai, illetve futásidőben nem szükséges a 101%-os Excel kompatibilitás akkor javaslom az FPSpreadSheet komponens kipróbálását / használatát.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Megköszönték: robotech

Excel OLE exportnál kínai karakterek jelennek meg. 2016 máj. 01 07:37 #1978

  • robotech
  • robotech profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 28
  • Köszönetek: 0
a string konverzio kapcsán kezdtel keresgélni, egy Word automatizálással foglalkozó oldalon úgy látszik, hogy utf8decode-ot kell használni:

{Open existing document} //Substitute your path and doc
w:= UTF8Decode('c:\my\path\mydoc.doc');
Server.Documents.Open(w); Server.Visible := True; {Make Word visible}

ha módosítottam a program sorát:
XLApp.Cells[1,1].Value:=UTF8decode(edit2.text);

akkor futás idóben SIGSEGV hibával kifagy.

(ellenben nagyon sok egyéb konverziót kipróbálta, így UTF8encode, systoUTF8, UTF8tosys, stb...stb..., azokkal lefut a program csak éppen ugyanúgy kinai karakterek jelennek meg)...

Excel OLE exportnál kínai karakterek jelennek meg. 2016 máj. 01 07:22 #1977

  • robotech
  • robotech profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 28
  • Köszönetek: 0
Egy annyi észrevétel még van, hogy ha konstanst írok be, akkor az excelben olvashatóak a karakterek.

pl:
XLApp.Cells[2,1].Value:='This text will be readable in Excel';

Arra gondoltam, hogy talán valami string konverziót kell végrehajtani a változón?

Excel OLE exportnál kínai karakterek jelennek meg. 2016 máj. 01 06:59 #1976

  • robotech
  • robotech profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 28
  • Köszönetek: 0
Üdv!

utoljára Delphiben használtam ilyet, de nem volt vele gond.
Lefuttatam a forráskódot Win10 alatt office 2010-el, és Xp alatt is office 2003-al, mindíg az a végeredmény, hogy ha OLE variant-tal akarnék EXCEL egy mezőjébe írni, és a string hosszabb mint 1 karakter, akkor a szöveg helyett kínai irásjelek jelennek meg. Lazarus: 1.2.0

Mit lehetne ezzel csinálni? valaki járt már így?

Var XLApp: OLEVariant;
x,y: byte;
path: variant;
begin
XLApp := CreateOleObject('Excel.Application'); // requires comobj in uses
try
XLApp.Visible := True;
XLApp.DisplayAlerts := False;
XLApp.Workbooks.Add;
XLApp.Cells[1,1].Value:=edit2.text;
finally
end;
Mellékletek:

  • Oldal:
  • 1