[ mish_ns @ 10.12.2011. 09:35 ] @
Pozdrav svima.

Interesuje me kako se radi integracija vb.net 2008 i excel-a. Tacnije treba mi mogucnost da napravim novi .xls fajl, otvorim ga upisem nesto i na kraju zatvorim.

Nasao sam neke primere na netu, ali postoji problem da mi excel.exe proces ostane aktivan i sl.

Ovo je primer koji sam nasao...
1. Dodam referencu na Microsoft Excel Object 12.0
2. Imports Excel = Microsoft.Office.Interop.Excel
3. kod->
Code:

 Dim xlApp As Excel.Application
        Dim xlWorkBook As Excel.Workbook
        Dim xlWorkSheet As Excel.Worksheet


        Dim oldCI As System.Globalization.CultureInfo = _
        System.Threading.Thread.CurrentThread.CurrentCulture
        System.Threading.Thread.CurrentThread.CurrentCulture = _
            New System.Globalization.CultureInfo("en-US")
        'Dim misValue As Object = System.Reflection.Missing.Value

        xlApp = New Excel.ApplicationClass
        xlWorkBook = xlApp.Workbooks.Add()
        xlWorkSheet = xlWorkBook.Sheets("sheet1")
        xlWorkSheet.Cells(1, 1) = "http://vb.net-informations.com"
        xlWorkSheet.SaveAs("C:\vbexcel.xls")

        xlWorkBook.Close()
        xlApp.Quit()
        System.Threading.Thread.CurrentThread.CurrentCulture = oldCI
        releaseObject(xlApp)
        releaseObject(xlWorkBook)
        releaseObject(xlWorkSheet)


 Private Sub releaseObject(ByVal obj As Object)
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
            obj = Nothing
        Catch ex As Exception
            obj = Nothing
        Finally
            GC.Collect()
        End Try
    End Sub


Ovde postoji problem da mi ostane aktivan excel.exe proces i kad otvaram fajl pojavi mi se dijalog kao na slici
[ DMX @ 04.08.2012. 16:45 ] @
A jesi li uradio ovo

Kreiraš folder koji se zove 1033 ispod Microsoft Office\Office11 foldera
a onda kopiraš excel.exe u 1033 folder i preimenuješ ga u xllex.dll

mene je nekad nešto zezalo, ne mogu da se setim tačno šta, ali sam ovo uputstvo ostavio sam sebi na kompu uz program koji sam radio.

probaj, možda pomogne.

pozdrav
[ aca andrijevic @ 05.08.2012. 09:10 ] @
Ovo sam se igrao pre neku godinu, moze da te odvede u nekom pravcu:

Exporting-printing to excel
[ anebojsa @ 07.09.2012. 16:53 ] @
na kraju nakon zatvaranja i snimanja fajla proveri proces excel.exe ako postoji ugasi proces. to je resenje.
[ mish_ns @ 24.05.2013. 12:14 ] @
Ljudi pozdrav...pomagajte!
Imam opet sličan problem sa excelom...

Imam aplikaciju koja prikuplja podatke sa nekog uređaja i smešta u excel tabelu...
Suština je da se svaki dan (tj. tačno u ponoć) napravi fajl sa imenom koje predstavlja datum npr: 23-04-2013.xls i tu se upisuje vreme merenja i težina nekih burića...

Međutim dešavaju se greške sa slika...

Molim vas da mi kažete u čemu može biti problem?

E da... ko je voljan da pomogne poslaću kod na PP...
[ ravni @ 24.05.2013. 13:59 ] @
Ja bih rekao da sve vec pise. 'File already exists.'
[ mish_ns @ 24.05.2013. 14:18 ] @
OK...ali kako da to izbegnem???
aplikacija se vrti 24/7 i potrebno je da uvek upisuje podatke u tabelu...
Kako obezbediti da se excel otvori, upisu podaci i zatvori, a da pri tome ne ostaje instanca u procesima...
U programu imam proveru da ako fajl ne postoji da se kreira novi, a ako postoji da se nastavi sa upisivanje...
Međutim problem je izgleda što se nekada desi da se taj workbook, excel aplikacija ili šta već ne zatvore...
i zbog toga mi se javlja ovakva greška...

Da li neko ima bolju ideju? Kako ovo uraditi?

[ mish_ns @ 25.05.2013. 10:14 ] @
Sad imam neku ideju da upis podataka vršim u txt fajlu...
Mislim da je brže nego sa excelom...
Samo bih onda kada krene novi dan sve podatke kopirao iz txt u excel fajl...
Recimo imam log za 24.05.2013.txt i sada u ponoć krećem sa logovanjem u novi fajl 25.05.2103.txt a ujedno pravim kopiju od 24.05.2013 i to u xls. formatu...

Da li je to ok...i da kako da uradim kopiranje iz txt u xls fajl???

HVALA
[ Dusan Kondic @ 25.05.2013. 11:36 ] @
Ako sam dobro razumeo, tvoj problem je u tome što pokušavaš da snimiš fajl sa imenom koje već postoji, kako je i Ravni primetio.
Snimi ga pod novim imenom i to bi bilo to (npr. xlWorkSheet.SaveAs("C:\vbexcel_yyyyMMddhhmmss.xls")).
Snimanje u txt pa prepisivanje u xls ti je samo dodatni posao koji ne rešava problem. Lakše ti je da iz izvornih podataka kreiraš i xls i txt nego da podatke iz kreiranog txt-a parsiraš (vraćaš u DataTable, List<T> ili sl.) pa da snimaš u xls.
Ako podatke želiš da dodaš u postojeći fajl, moraš da povučeš podatke iz tog fajla, dodaš nove (podatke) i na kraju snimiš preko tog fajla (da ga "pregaziš").
[ mish_ns @ 25.05.2013. 11:47 ] @
Do sad sam imao situaciju da svakih 40tak sekundi primam podatak sa uređaja i snimam u excel...

Znači svakih 40tak sekundi otvorim workbook i upišem podatak i onda zatvaram...
Mislim da ponekad sam proces excel.exe ostane aktivan u pozadini i da se zbog toga dešava ova situacija...

Kod txt fajlova bih radio sa Stream writer-om i čini mi se da bi to bilo bolje...
Otvorim fajl, append podatak i zatvorim fajl...bar mi se čini da bi bilo bolje :)



[ anaxim @ 25.05.2013. 14:24 ] @
Ako je aplikacija koja prikuplja podatke sa uradjaja prilagodljiva mozda je bolje resenje da ih prosledjuje nekom web servisu koji ce ih snimati u bazu. Kada budes imao celi dan snimljen u bazu veoma ti je lako da to jednim pozivom smestas u EXCEL, TXT, XML ili sta ti vec treba.
[ mish_ns @ 28.05.2013. 10:12 ] @
Pozdrav...

Hvala svima na sugestijama...
Uradio sam na sledeći način. U temp folderu sam kreirao .txt fajl sa datumom upisa npr. 25-05-2013.txt
čija je struktura sledeća:
Code:
Vreme Težina
08:55:15 40,25
08:55:47 40,15
08:22:25 40,15 


takođe nakon upisa podatka u ovaj fajl pravio sam i kopiju ali u .csv formatu gde je delimiter SPACE...

Sada me interesuje kako mogu da konvertujem taj csv ili txt u excel format, tj. da podaci budu lepo raspoređeni po kolonama
Npr kolona 1 vreme i kolona 2 težina...


Znam za varijantu da u excelu kažem automatski da mi je SPACE delimiter pa da tako uradim ono što mi treba, ali
da li postoji neka komanda pa da to jednostavno uradim iz VB.net-a...

HVALA