Import/export Excel files - Funziona!!

Forum dedicato ai programmatori di X# in lingua italiana – Italian language forum

Moderator: wriedmann

User avatar
Gfb22
Posts: 105
Joined: Sat Oct 08, 2022 7:43 pm
Location: Italy

Import/export Excel files

Post 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
gfb
User avatar
wriedmann
Posts: 3757
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Import/export Excel files

Post 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
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
Gfb22
Posts: 105
Joined: Sat Oct 08, 2022 7:43 pm
Location: Italy

Import/export Excel files

Post 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
errVO.jpg (20.52 KiB) Viewed 1760 times
Grazie!
gfb
User avatar
wriedmann
Posts: 3757
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Import/export Excel files

Post 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
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
wriedmann
Posts: 3757
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Import/export Excel files

Post 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
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
Gfb22
Posts: 105
Joined: Sat Oct 08, 2022 7:43 pm
Location: Italy

Import/export Excel files - Esempio ok!

Post 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
xls1.jpg (46.21 KiB) Viewed 1760 times
xls2.jpg
xls2.jpg (16.48 KiB) Viewed 1760 times
gfb
User avatar
wriedmann
Posts: 3757
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Import/export Excel files - Esempio ok!

Post 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....
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
Gfb22
Posts: 105
Joined: Sat Oct 08, 2022 7:43 pm
Location: Italy

Import/export Excel files - Esempio ok!

Post by Gfb22 »

Eccomi Wolfgang.
"...la tabella che hai aperto ha dei contenuti?
Certamente: ti allego il file .xlsx.
Buon lavoro!
gfb
Riep-ColNEW.zip
(10.58 KiB) Downloaded 162 times
gfb
User avatar
wriedmann
Posts: 3757
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Import/export Excel files - Esempio ok!

Post 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
21-06-2023_13-22-06.png (11.02 KiB) Viewed 1762 times
Ci guarda e converto l'applicativo di esempio in un MDI - probabilmente lo SpitWindow ha qualche problema con lo SDI.
Saluti
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
User avatar
wriedmann
Posts: 3757
Joined: Mon Nov 02, 2015 5:07 pm
Location: Italy

Import/export Excel files - Esempio ok!

Post 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
21-06-2023_13-38-05.png (129.03 KiB) Viewed 1762 times
Ho aggiustato l'esempio e ne ho aggiunto un altro in formato MDI (sempre nello zip).
Saluti
Wolfgang
Wolfgang Riedmann
Meran, South Tyrol, Italy
wolfgang@riedmann.it
https://www.riedmann.it - https://docs.xsharp.it
Post Reply