Word 2013 - Alapértelmezett mentési formátum lekérdezése C#

Word 2013 - Alapértelmezett mentési formátum lekérdezése C#

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....

using Word = Microsoft.Office.Interop.Word;

 

A Word Application-t példányosítanunk kell és nincs más dolgunk, mint elérni a "DefaultSaveFormat" tulajdonságot. 

Word.Application wApp = new Word.Application();

Valahgy így:

            // DefaultSaveFormat property, tartalmazza a a beállított mentési formátumot.
            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;
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