Newsgroup: it.comp.lang.visual-basic
Titolo: [.NET] .NET e interazione con Excel.

Dovendo fargli svariate modifiche, sto riscrivendo da
zero un vecchio programma VB in .NET, fra le altre cose
devo importare in Excel un CSV.
Come da vecchio trucco letto sul NG :-), registro una
macro direttamente in Excel e la inserisco, coi dovuti
adattamenti, nel mio prog. Più o meno tutto bene, tranne
che in un punto, che *ovviamente* era quello che mi
interessava di più, che consiste nel forzare il contenuto
di una colonna ad essere interpretato come data GMA.
 
La riga  dove ho problemi è questa:
************
Workbooks.OpenText FileName:="nomedelmiofile", _
Origin:=xlMSDOS, _
StartRow:=1, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, _ Space:=False,
Other:=False, _
FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 4)), _
TrailingMinusNumbers:=True
************
e precisamente il FieldInfo. In VB5 funziona tutto
esattamente come sta, e va senza nessun problema,
ho provato in early e in late binding, e sia con
il riferimento a Excel settato nel progetto che
dichiarando esplicitamente gli Enums dove serve
è tutto OK.
Ma a me serve in .NET, in cui sono più che abbondantemente
niubbo, e ovviamente vorrei qualificare tutto per bene.
 
Ho frugato un po' per scoprire i particolari e sono
arrivato a questa roba qui:
 
************
xlsApp.Workbooks.OpenText(FileTempCSV, _
Origin:=Microsoft.Office.Interop.Excel.XlPlatform.xlMSDOS, _
StartRow:=1, _
DataType:=Microsoft.Office.Interop.Excel.XlTextParsingType.xlDelimited, _
TextQualifier:=Microsoft.Office.Interop.Excel.Constants.xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, _
************
........e qui mi fermo. Credo di aver provato una
ventina di dichiarazioni diverse per quel [CENSURA]
di Array. Come cappero lo dichiaro ?
 
****************************
 
Subito prima di postare ho trovato, credo, una
soluzione qui:
http://social.msdn.microsoft.com/Forums/en-AU/vsto/thread/57aba60e-e290-4b1c-b62f-c53ae35930d2
 
ma mi pare un po' una schifezza, as Object... è corretto ?
 
Bye, G.

 ma mi pare un po' una schifezza, as Object... è corretto ?
 
Dim MioInfoField(,) As Object = New Object(,) _
{{1, 1}, {2, 1},{3, 4}}
 
xlsApp.Workbooks.OpenText(FileTempCSV, _
	[...] FieldInfo:=MioInfoField, [...]
 
Per funzionare, funziona. Mi fa un tantino schifo
lo stesso, ma in effetti funziona :-)
 
Bye, G.

 lo stesso, ma in effetti funziona :-)
 
OK, a quanto pare adesso funziona anche così:
Dim MioInfoField(,) As Integer = {{1, 1}, {2, 1}, {3, 4}}
 
Ero, anzi *sono* convinto di averci già provato, ma
mi dava un errore in compilazione... 'zzo ne so,
evidentemente sbagliavo qualcosa.
 
Boh.
 
Bye, G.

 devo importare in Excel un CSV.
 
[CUT]
 
Hai provato a pensare di usare la OpenXML SDK 2.0?
Noi esportiamo in excel xlsx senza passare per COM e siamo anche molto più veloci!
Quando usavamo l'oggetto excel ci metteva una vita ad esportare qualche centinaio di record.
Con OpenXML SDK è una goduria... possiamo esportare decine di migliaia di record nel giro di pochi secondi.
 
Svantaggi: devi smazzarti un pò a capire come funziona l'SDK, ma poi ci fai quel che vuoi.
 
Nicola
 

 l'SDK, ma poi ci fai quel che vuoi.
 
Intanto me lo segno, grazie :-).
 
Bye, G. 
 

 minuti fa non sapevo neanche che esistesse :-D
 
 
Eheheh :)
 
Ti segnalo anche questo:
http://closedxml.codeplex.com/
 
 
E' un wrapper sull'OpenXML SDK 2.0 che consente una migliore maneggevolezza e più semplicità d'uso.
Noi non lo usiamo perchè ormai abbiamo le nostre librerie standard ma se l'avessi scoperto prima forse avrei evitato tanti (tanti!) smadonnamenti.
 
Nicola