Page 3 of 6
Import/export Excel files
Posted: Tue Jun 20, 2023 5:18 am
by Gfb22
Buongiorno Wolfgang.
1) "..tra i passi eseguiti non hai elencato l'integrazione del manifest nel tuo eseguibile": come faccio ad integrarlo in VO?
2) Ho la versione 2.8 Sp3, build 2837 di VO e l'errore di compilazione è proprio "unknown CLASS OLEAUTOOBJECTEX".
Grazie!
gfb
Import/export Excel files
Posted: Tue Jun 20, 2023 5:39 am
by wriedmann
Ciao Gian Ferruccio,
1) per il manifest (che dovrebbe essere presente in ogni applicativo Window) esiste tra l'altro anche un esempio nell'esempio Standard MDI, e anche il mio programma di esempio ne ha uno:
Code: Select all
RESOURCE CREATEPROCESS_MANIFEST_RESOURCE_ID RC_RT_MANIFEST C:CAVOWorkToolsXlsxFileXlsxFile.manifest
Basta vedere nel modulo "Manifest".
Direi che la prima cosa da fare non è l'integrazione in una propria applicazione, ma import e compilazione dell'esempio, e solo se quello funziona, si può fare l'integrazione come secondo passo.
2) per quanto riguarda la classe OleAutoObjectEx:
Code: Select all
STATIC GLOBAL GUID_NULL is _WINGUID
CLASS OleAutoObjectEx Inherit OleAutoObject
EXPORT cIID as STRING // Interface Id of the class
EXPORT cClsId as STRING // ClassId of the class (when it is a coclass)
EXPORT cProgId as STRING // ProgId idem
protect destroyCounter as int
METHOD __CreateFromIDispatch(lpIDispatch as ptr) as LOGIC PASCAL Class OleAutoObjectEx
LOCAL sIID is _WINGUID
LOCAL lpNewIDispatch as ptr
LOCAL oDispatch as cIDispatch
LOCAL hResult as LONG
BEGIN SEQUENCE
IF lpIDispatch != null_ptr
IF SLen(self:cIID) > 0
oDispatch := OBJECT(_cast, lpIDispatch)
IF oDispatch != null_object
IF CreateGuidFromString(cIID, @sIID) .and. ! IsEqualGuid(@sIID, @GUID_NULL)
hResult := oDispatch:QueryInterface(@sIID, @lpNewIDispatch)
IF ( OleFailed(self:hResult) .and. lpNewIDispatch != null_ptr)
BREAK
ENDIF
lpIDispatch := lpNewIDispatch
ENDIF
oDispatch:Release()
oDispatch := null_object
ENDIF
ENDIF
ENDIF
RETURN Super:__CreateFromIDispatch(lpIDispatch)
RECOVER
if (oDispatch != null_object)
oDispatch:Release()
ENDIF
END
RETURN FALSE
METHOD Init(ObjID, uLcid, fNoFuncArray, fROTCheck) Class OleAutoObjectEx
destroyCounter := 0
IF IsNil(ObjID) .and. SLen(self:cClsId) > 0
ObjID := self:cClsId
ENDIF
Super:Init(ObjID, uLcid, fNoFuncArray, fROTCheck)
IF SLen(self:cProgId) > 0
self:atomObjName := String2Symbol(self:cProgId)
ENDIF
RETURN self
Ne metterò un file prg nello zip.
Saluti
Wolfgang
Import/export Excel files
Posted: Tue Jun 20, 2023 12:15 pm
by Gfb22
Eccomi.
1) Aggiunto a XlsxFile COM la tuea CLASS OleAutoObjectEx e compilato e tutto ok;
2) Compilato senza errori XlsxFileTester ma quando provo ad eseguirlo mi da il seguente messaggio:
- errVO.jpg (20.52 KiB) Viewed 1731 times
Grazie!
Import/export Excel files
Posted: Tue Jun 20, 2023 12:33 pm
by wriedmann
Ciao Gian Ferruccio,
nella cartella c:cavoworkToolsXlsxFile si trovano tutte le componenti corretti? Serve sia la XSharp.Tools.XlssFile.DLL che la EPPlus.dll.
Puoi cambiare tranquillamente il percorso dell'eseguibile - devi solo assicurarti che tutti i file necessari ci siano e che anche il manifest dell'eseguibile è nella cartella indicata nelle sorgenti per poter essere incluso al momento della compilazione.
Se tutto questo è corretto: Nel file zip si trova un file sxslog.cmd. Eseguilo (si fermerà subito), poi lancia l'eseguibile, e subito dopo l'errore continua l'esecuzione del file batch.
Poi metti il file risultante come allegato a una risposta che possiamo vedere.
Saluti
Wolfgang
Import/export Excel files
Posted: Tue Jun 20, 2023 12:56 pm
by wriedmann
Ciao Gian Ferruccio,
se non riusciamo a farlo funzionare, posso vedere in teleassistenza, ma sicuramente non prima delle ore 20 perchè sto lavorando fuori ufficio.
Saluti
Wolfgang
Import/export Excel files - Esempio ok!
Posted: Tue Jun 20, 2023 2:07 pm
by Gfb22
Eccomi, ancora: l'app di esempio adesso funziona.
- Cambiato dir;
- copiato file, comprese alcune VO DLL di volta in volta mancanti;
- provato ad aprire un file .DBF (che visualizza anche correttamente);
- provato ad aprire un file .xlsx: nella caption compare il nome del file ma non visualizza [penso che non visualizzi oDisplay - line 70 di method OpenXlsxFile()] ma non dovrebbe essere un problema una volta che si costruisce intorno il codice...
Al momento non ho provato altro: in questi giorni ho modifiche più 'urgenti' da portare avanti poi provo ad integrare la tua app di esempio (che funziona) per a) leggere i file .xlsx e scrivere il corrispondente .DBF; b) per leggere i file .DBF e scrivere il corrispondente .xlsx (che sono le due procedure che più mi interessano nelle mie app).
Quando ci metto mano ti aggiorno e ...se ho dubbi ti disturbo ancora.
Grazie davvero per il supporto e la pazienza!
gfb
- xls1.jpg (46.21 KiB) Viewed 1731 times
- xls2.jpg (16.48 KiB) Viewed 1731 times
Import/export Excel files - Esempio ok!
Posted: Wed Jun 21, 2023 6:06 am
by wriedmann
Ciao Gian Ferruccio,
la tabella che hai aperto ha dei contenuti?
Saluti
Wolfgang
P.S. in parecchi dei miei programmi faccio un uso pesante di questa libreria. Un mio cliente (produttore di finestre) gestisce il calcolo prezzi dei suoi prodotti in una marea di mappe Excel, e li leggo da li e li scrivo poi nell'anagrafica articoli per la progettazione. E questo è solo un esempio....
Import/export Excel files - Esempio ok!
Posted: Wed Jun 21, 2023 11:10 am
by Gfb22
Eccomi Wolfgang.
"...
la tabella che hai aperto ha dei contenuti?
Certamente: ti allego il file .xlsx.
Buon lavoro!
gfb
Import/export Excel files - Esempio ok!
Posted: Wed Jun 21, 2023 11:23 am
by wriedmann
Ciao Gian Ferruccio,
questa è una cosa veramente strana: i dati vengono effettivamente letti e messi nella ListView, ma per un motivo a me sconosciuto il ListView non viene visualizzato.... Con le tabelle che usato qui funziona:
- 21-06-2023_13-22-06.png (11.02 KiB) Viewed 1733 times
Ci guarda e converto l'applicativo di esempio in un MDI - probabilmente lo SpitWindow ha qualche problema con lo SDI.
Saluti
Wolfgang
Import/export Excel files - Esempio ok!
Posted: Wed Jun 21, 2023 11:42 am
by wriedmann
Ciao Gian Ferruccio,
sembra un problema di timing....
La tua tabella funziona se la visualizzazione della finestra
Code: Select all
oDisplay:Size := Dimension{ self:CanvasArea:Width, self:CanvasArea:Height }
oDisplay:Show( SHOWZOOMED )
viene spostata dalla fine della lettura all'inizio prima di leggere il foglio:
- 21-06-2023_13-38-05.png (129.03 KiB) Viewed 1733 times
Ho aggiustato l'esempio e ne ho aggiunto un altro in formato MDI (sempre nello zip).
Saluti
Wolfgang