Szinte naponta találkozom olyan problémával, amelyre sem az MSDN-en, sem más fórumokon nem találok megoldást, vagy csak részleges választ kapok. Ezért aztán elhatároztam, hogy cikksorozatot indítok azokról a kérdésekről, amelyek felmerülnek a munkám során, Magánvélemény: a kedvencem az, amikor felteszik ugyanazt a kérdést amit én, de a válasz: "Azt úgy nem lehet megoldani, használd inkább X, vagy Y eszközt!". Csak hát ugye nem ez volt a kérdés...
Nos tehát csapjunk a lecsóba!
Alapértelmezett mentési formátum lekérdezése Word 2013-ból.
A feladat a következő: formázott Word dokumentumot szeretnénk menteni anélkül, hogy a Word ablakot magát megnyitnánk (Erre számtalan példát találhatunk a neten.), de a fájlnevet mi állítjuk össze úgy, hogy a Wordben fbeállított mentési formátumnak megfelelő kiterjesztést adjuk meg a fájlnévben. Tehát tudnunk kell, mit állított be mentési formátumnak a felhasználó.
Használnunk kell a Microsoft Office Interop Service-t, amelyen keresztül elérhetjük a Word interfészt, tehát hozzá kell adnunk referenciaként a projekthez.
Miután ez megvolt, használnunk is kell azt....
A Word Application-t példányosítanunk kell és nincs más dolgunk, mint elérni a "DefaultSaveFormat" tulajdonságot.
Valahgy így:
string format = wApp.DefaultSaveFormat;
És most jön a trükk! Az interfész nem adja vissza a kiterjesztés, hanem a beállított formátum nevét, tehát tudnunk kell milyen formátumhoz milyen kiterjesztés tartozik. Az MSDN töredékinformációkat tartalmaz, szóval ki kellett kísérleteznem, mit is tartalmazhat a DefaultSaveFormat tulajdonság.
A mintaprogram teljes forráskódja így néz ki:
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Word = Microsoft.Office.Interop.Word;
namespace WordMentesMinta
{
class Program
{
static void Main(string[] args)
{
// A Word Application egy példánya
Word.Application wApp = new Word.Application();
// DefaultSaveFormat property, tartalmazza a a beállított mentési formátumot.
string format = wApp.DefaultSaveFormat;
// Kiírjuk az Word által visszaadott formátumot és kiterkesztést.
// A "?" operátorra azért van szükség, mert ha a default formátum van beállítva,
// akkor a DefaultSaveFormat értéke egy üres string.
Console.WriteLine(String.Format("Az alapértelmezett mentési formátum: \"{0}\" és kiterjesztés: \"{1}\""
,format = (format == "") ? "DocxStrict" : format, GetDefaultSaveFormatInfo(format)));
Console.ReadKey();
}
///
/// Visszaadja a Word alapértelmezett mentési fájlkiterjesztését "."-al.
/// Pl. visszatérési érték: ".doc"
///
static string GetDefaultSaveFormatInfo(string format)
{
string ret = String.Empty;
// A leírás az alábbi MSDN linken található:
// https://msdn.microsoft.com/en-us/library/microsoft.office.interop.word._application.defaultsaveformat(v=office.14).aspx
// A többi kisárletezés eredménye.
switch (format)
{
case "":
case "DocxStrict":
ret = ".docx";
break;
case "MacroEnabledDocument":
ret = ".docm";
break;
case "MacroEnabledTemplate":
ret = ".dotm";
break;
case "Template":
ret = "dotx";
break;
case "Doc":
ret = ".doc"; break;
case "Dot": ret = ".dot";
break;
case "WebArchive":
ret = ".mht";
break;
case "Html":
case "ReducedHtml":
ret = ".html"; break;
case "Text":
case "CRText":
case "8Text":
case "8CRText":
case "Unicode":
ret = ".txt";
break;
case "Rtf":
ret = ".rtf";
break;
case "FlatXML":
case "XML":
ret = ".xml";
break;
case "ODT":
ret = ".odt";
break;
case "MSWorks":
ret = ".wps";
break;
default:
ret = ".docx";
break;
}
return ret;
}
}
}
A program Windows 7 alatt, Word 2013-0l lett tesztelve.
Sok sikert!
Sziklai Frigyes