Přechod Excel VBA na VB.NET   zodpovězená otázka

VB.NET, Office

Dobrý den. Prosím o radu a pomoc se zpracováním "dbf" a "xls" souborů pomocí VB.NET. Vytvořil jsem "program" pomocí VBA - lze ho "distribuovat" jako doplněk pro Excel (xla). Rád bych ten program ale přepsal pomocí VB.NET tak, aby nebyl "záviský" na Excelu a mohl pracovat jako samostatný "exe" program.

Nyní jsem ve fázi, kdy bych potřeboval pomocí VB.NET načíst vstupní soubor formátu "dbf", následně načíst číselník (tabulku) ve formátu "xls" a začít zpracovávat jednotlivé řádky databáze.

Ve VBA byla data na jednotlivých listech, takže jsem jednoduše otevřel soubor a k datům se dostal přes objekt "Workbook("něco").Sheets("něco").cells(řádek, sloupec).Value". Ale jak ve VB.NET?

Pomocí "StreamReader" to asi nepůjde, to je jak jsem ze zdejšího seriálu pochopil asi jen na text. Pak jsem něco četl o "ADO.NET" kdy se pomocí "Data Source Configuration Wizard" načte do programu nová datová sada (databáze). No a ještě jsem se setkal s možností jak k datům přistupovat pomocí "OleDbConnection" objektu (http://msdn.microsoft.com/library/defaul...

Každopádně se v tom trochu ztrácím a tak bych potřeboval poradit, jakou cestou se dát - jaký zvolit postup pro otevření a načtení souborů (dbf a xls).

Pro informaci přikládám původní kód VBA:

For radek_vstup = 2 To Sheets("Vstup").Rows.Count
  'načtení vstupní hodnoty ze sloupce 34
  Vstup = Sheets("Vstup").Cells(radek_vstup, 34).Value
  
  'hledání hodnoty Vstupu v číselníku
  PocetVyskytu = 0  'počet výskytů hodnoty Vstup v číselníku
  For radek_ciselnik = 2 To Sheets("Ciselnik").Rows.Count
    If Sheets("Ciselnik").Cells(radek_ciselnik, 1).Value = Vstup Then
      PocetVyskytu = PocetVyskytu + 1
    End If
  Next radek_ciselnik
  
  'zapíšu výstupní větu
   Sheets("Vystup").Cells(radek_vystup, 1).Value = Vstup
   Sheets("Vystup").Cells(radek_vystup, 2).Value = PocetVyskytu
   radek_vystup = radek_vystup +1
  
Next radek_vstup

Poradíte prosím jaký zvolit postup pro otevření a načtení souborů (dbf a xls) a jak pracovat s jednotlivými hodnotami ze souborů?

Díky, Jiří

Doplněno:

Tak na jednu část problému už bych snad řešení měl:

Import dat z Excelu:

====================

Dim EXL As New Excel.Application()

Sub něco()
  Dim List As New Excel.Worksheet()
  List = EXL.Workbooks.Open("C:\soubor.xls").Worksheets.Item(1)
  ' a teď už snad můžu pokračovat ve stylu VBA ...
End Sub

Nicméně uživatel musí mít nainstalovaný Excel, který sice běží na pozadí, ale musí běžet.

... teď ještě to "dbf" ...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Obávám se, že formát xls bez nainstalovaného Excelu takto snadno neupravíte. Osobně bych Vám doporučil použít Excel ze sady Office 2007, který ukládá data ve formátu OpenXML, což je formát uzpůsobený pro úpravy i bez nainstalovaných produktů. Navíc je zajíštěná zpětná kompatibilita otevření až do Office verze 2000 (jako dodatečný balíček).

Pokud jste ze severu naší republiky (nebo máte možnost se dostat do Liberce), tak doporučuji navštívit seminář o Excelu (8. června 2007 a je zcela zdarma), kde jistě narazíte na odborníky, kteří pomohou vyřešit Váš problém. Informace o akci a registrace jsou zde: http://excelplus.net/news.php?readmore=1...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Odkaz k tématu:

http://support.microsoft.com/kb/326548

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Máte pravdu. Ale jakým způsobem teď upravujete jednotlivé buňky?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Já ani tak nepotřebuju upravovat buňky excelu, ale hlavně se potřebuju dostat k datům, která jsou v buňkách uložená (hledat v nich a porovnávat je s jinými daty (z dbf souboru) a tvořit z nich výstupní textový soubor.

Teď zatím pracuju na formulářích, vlastní kód začnu psát v nejbližší době, snad se mi ta data podaří importovat ...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takže, dbf soubor lze importovat minimálně dvěma způsoby:

1. Použít "DataReader"

2. POuřít "DataAdapter"

ad 1.

Při použití DataReaderu se otevře spojení na dbf soubor a data se načítají řádek po řádku.

ad 2.

Při použití DataAdapteru se v operační paměti vytvoří DataTable (příp. DataSet) a od souboru se odpojím. S DataTable lze dále pracovat (odpojená databáze).

Mě vyhovoval druhý způsob:

'deklarace spojení
Dim con As New OleDb.OleDbConnection()

'nastavení parametrů spojení na databázi
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
                     & "Data Source=D:\POKUS;" _
                     & "Extended Properties=DBASE III;"

'definice dotazu
Dim cmd As New OleDb.OleDbCommand("SELECT * FROM DbfFile")
cmd.Connection = con

'definice DataAdapteru
Dim da As New OleDb.OleDbDataAdapter(cmd)

'definice DataTable
Dim dt As New DataTable()

'naplnění tabulky
da.Fill(dt)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

řeším zápis do DBF souboru. Zjistil jsem že se na něj používá SQL dotaz. Otevření a načtení do datasetu není problém, ale ani za boha nemůžu přijít na to jak přidat řádek (něco ve smyslu INSERT INTO atd..) ale kam tento dotaz mám dát ? jakým způsobem se spuští dotazy na DBF souboru ???

Děkuji za odpověď

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback