Jdi na obsah Jdi na menu
 


Otevření dokumentu Office bez rozlišení verze

21. 12. 2007

Zřejmě jste si všimli, že s příchodem balíku Office 2007 se změnil i typ výchozích formátů souborů při ukládaní dokumentů.
Pokud píšete aplikace pro více uživatelů a ti mají různé verze Office včetně nových 2007 a navíc ve svém kódu používáte metodu GetOpenFileName, určitě jste už museli řešit, jak nechat vybrat uživatele ten správný typ formátu.

Pří použití metody GetOpenFileName máte možnost nastavit filtry pro výběr formátu, ale taky nemusíte žádné omezení nastavovat a nechat uživatele vybrat ze všech typů souborů ( txt, doc, xls, bas, dbf,mdb a tisíce dalších ), což se v praxi moc nepoužívá neboť to uživatele zdržuje. Většinou se snažíme ukázat pouze ty dokumenty, které nás zajímají.
Vytvoření filtru je naprosto jednoduché, stačí napsat jakýkoliv textový popis, který se zobrazí v comboboxu Typ souboru (Files of type) a vůbec nezáleží jaký textový popis zvolíte, ale běžnou praxi je napsat název aplikace např.

Application.GetOpenFilename("Excel(*.xls),*.xls")
' ale muzete napsat opravdu cokoliv, jako textovy popis
' a dokonce nemusite uvadet text za carkou - carku ale ponechat musite
Application.GetOpenFilename("Moje soubory jen moje(*.xls),")


Obrázky obou případu následují Filtr Excel souboru Vlastni filtr

Pokud byste si třeba napsali svůj vlastní program, který by používal vlastní typy souboru stačilo by pak napsat tento jednoduchý kód, který by zobrazil pouze Vaše soubory ( zvolil sem koncovky "aaa"  )

Application.GetOpenFilename("Vaše aplikace (*.aaa),*.aaa")

Vlastni filtr aplikace

Teď už zbývá vyřešit pouze otázku, jak uživateli zobrazit typy souboru starších verzí Office tak nejnovějších 2007.

Opět máme více možnosti, můžeme vybrat jaký typ dokumentu uživatel chce vidět v comboboxu "typ souboru". Tzn. že si klasicky rozklikne šipku a vybere jestli chce vidět dokumenty pouze xls nebo xlsx atd.
Programový kód by vypadal takto

Application.GetOpenFilename("Excel Files (*.xls),*.xls,Excel Files 2007 (*.xlsx),*.xlsx")
' pomoci argumentu FilterIndex muzeme urcit
' ktery typ bude vybrat jako prvni

Application.GetOpenFilename (FileFilter:="Excel Files (*.xls),*.xls,Excel Files 2007 (*.xlsx),*.xlsx",FilterIndex:=2)


Všimněte si, že jednotlivé typy dokumentů jdou pěkné za sebou a jsou odděleny čárkou. Nejprve celá specifikace klasického xls - Text položky(přípona) čárka a pak následuje další typ dokumentu. Výsledek vidíte na obrázku níže

Dva typy dokumentu

Další z možnosti je vypsat všechny typy dokumentů, které chceme mít možnost otevřít do jednoho řádku. Jak se to dělá? Je to opět tak jednoduché jako předchozí případ. Kód je tentokrát delší, protož vypisujeme všechny možné typy dokumentu Excelu, ale rozdíl v zápisu je pouze ten, že vyměníme čárku za středník mezi jednotlivými typy dokumentů.

Application.GetOpenFilename(FileFilter:="All Excel Files (*.xlsx;*.xlsm;*.xlsb;*.xlam;*.xltx;*.xltm;*.xls;*.xlt),")

All Excel_Files.

A nakonec zbývá poslední možnost jak nechat uživatele vybrat typ souboru bez omezeni verze. Výhoda posledního souboru je univerzálnost, pokud Microsoft nezmění první dvě písmenka a vždy bude jen přidávat nebo měnit písmena u přípony Excel dokumentu, tak už nikdy nebude muset dopisovat další koncovky do kódu, tak jak tomu je v příkladu výše. Nevýhoda je, že se můžou zobrazit i soubory, které s Excelem nemají nic společného, ale jejich přípony dokumentů začínají na "xl" ( nejsem si jistý, jestli toto má Microsoft patentováno ).Další možnou nevýhodou je zobrazení hvězdičky v typu dokumentu, záleží na uživateli, jestli se mu to bude líbit nebo ne. Kód pro toto univerzální řešení následuje

Application.GetOpenFilename(FileFilter:="All Excel Files (*.xl*),")

Univerzalni vyber souboru

Jak sami vidíte, jdou vybrat všechny typy dokumentu pro Excel nový i starší.

 

Komentáře

Přidat komentář

Přehled komentářů

GetOpenFileName - Initial FileName ?

(Premek, 19. 9. 2008 20:05)

Pokud to dobre chapu, mel by Vam pomoci tento odkaz
http://groups.google.com/group/microsoft.public.excel.programming/msg/0f8e66f9e6f73cc4?pli=1

kde je diky API(ktere je zapouzdreno v tride), vyresen vas problem

GetOpenFileName - Initial FileName ?

(Standa, 13. 9. 2008 9:03)

Hezký popis funkce GetOpenFileName. Všechno je jasné. Ale co bych ještě rád věděl je, jak nastavit okénko FileName (v textu je nad okénkem Files of type). Pak by bylo uživateli naznačeno, o jaký soubor by mělo jít především ... Jde tato proměnná před voláním GetOpenFileName nějak nastavit?
Standa

RE:Cesta k souborům

(Premek, 22. 12. 2007 12:48)

Ahoj
jde to, použij příkaz CHDIR (Change Dir - změn adresář)

Např. když potřebuješ zobrazit dialog pro výběr souboru už rovnou např. v C:\Temp tak napíšeš toto
ChDir "C:\Temp\"
MsgBox Application.GetOpenFilename("Excel (*.xls),")

pokud cesta neexistuje, vrátí chybu 76 - nelze nalézt cestu.

Pokud bys potřeboval "vyskočit" o úroveň výše, můžeš použít tento zápis
ChDir ".."

Ale pozor, má to i své úskalí, příkaz ChDir mění pouze adresář,neumí měnit disky. Funguje to následujícím způsobem, pokud je zrovna aktuální disk "C" můžeš se po něm pohybovat do sytosti, ale pokud bys potom chtěl kódem přejít na disk "D" např. ChDir "D:\Temp" tak se očekávaného výsledku nedočkáš, budeš stále v posledním adresáři na disku "C". Musel bys přejít ručně na disk "D" kód pustit znovu a potom by to fungovalo, stejně to je i zpět na disk "C". Ale neboj se existuje ještě jeden příkaz a ten umí měnit disk :-)
Ten příkaz se jmenuje "ChDrive" a funguje velice jednoduše, viz. kód

' nastavi jako vychozi disk C
ChDrive "C:\"
' prejde do zadane cesty a zobrazi okno pro vyber souboru
ChDir "C:\Temp"
MsgBox Application.GetOpenFilename("Excel (*.xls),")

' nastavi jako vychozi disk D
ChDrive "D:\"
' prejde do zadane cesty a zobrazi okno pro vyber souboru
ChDir "D:\Hudba\"
MsgBox Application.GetOpenFilename("Excel (*.xls),")

Přemek

Cesta k souborům

(Jirka, 22. 12. 2007 9:24)

Ahoj tuto metodu používám a mám jednu otázku. Jde nějak nastavit, aby se uživateli otevřel adresář pro výběr souborů v kterém mám uložen soubor, z kterého je volána tato metoda? Standardně se mi nabízí adresář, který je nastaven v "Výchozí umístění souborů".

Jirka

 

 

 

Z DALŠÍCH WEBŮ

REKLAMA