2015年03月03日

【C#】Office Word / Excel / PowerPoint でメタ情報を取る方法のメモ

備忘録
Word / Excel / PowerPointいずれもほぼ同じ方法でメタ情報を取れるが、若干の違いがある。
取れる情報と取れない情報とがある。取れない情報は取ろうとすると例外が発生する。
なお、Application.Quit()に失敗するとWordとかが開きっぱなしになってしまうので注意。

☆依存関係
using Word = Microsoft.Office.Interop.Word;
using Excel = Microsoft.Office.Interop.Excel;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;

☆Wordのメタ情報を取る
        public static void ListWord()
        {
            object oMissval = Missing.Value;
            object oFile = @"C:\test\test.docx";
            Word.Application wApp = null;
            Word.Document wDoc = null;
            object oReadonly = false;
            object oSaveChange = false;
            try
            {
                wApp = new Word.Application();
                wApp.Visible = false;   // Wordを非表示にする
                wDoc = wApp.Documents.Open(ref oFile, ref oMissval, ref oReadonly, ref oMissval, ref oMissval,
                    ref oMissval, ref oMissval, ref oMissval, ref oMissval, ref oMissval, ref oMissval,
                    ref oMissval, ref oMissval, ref oMissval, ref oMissval, ref oMissval);
                object builtProp = wDoc.BuiltInDocumentProperties;
                Type builtPropType = builtProp.GetType();
                for (int i = 1; i <= 50; i++)
                //int i = 1;
                {
                    try
                    {
                        object prop = builtPropType.InvokeMember("Item", BindingFlags.GetProperty, null, builtProp, new object[] { i });
                        Type propType = prop.GetType();
                        object propVal = propType.InvokeMember("Name", BindingFlags.GetProperty, null, prop, new object[] { });
                        Console.WriteLine(String.Format("Name  {0} = {1}", i, propVal));
                        propVal = propType.InvokeMember("Value", BindingFlags.GetProperty, null, prop, new object[] { });
                        Console.WriteLine(String.Format("Value {0} = {1}", i, propVal));
                    }
                    catch
                    {
                    }
                }
            }
            catch
            {
            }
            finally
            {
                // 確実にドキュメントのクローズとWordを終了させる!
                ((Word._Document)wDoc).Close(ref oSaveChange, ref oMissval, ref oMissval);
                ((Word._Application)wApp).Quit(ref oSaveChange, ref oMissval, ref oMissval);
            }
        }

☆Excelのメタ情報を取る
        public static void ListExcel()
        {
            object oMissval = Missing.Value;
            string strFile = @"c:\test\test.xlsx";
            Excel.Application eApp = null;
            Excel.Workbook eBook = null;
            object oReadonly = false;
            object oSaveChange = false;
            try
            {
                eApp = new Excel.Application();
                eApp.Visible = false;   // Excelを非表示にする
                eBook = eApp.Workbooks.Open(strFile, oMissval, oReadonly, oMissval, oMissval,
                    oMissval, oMissval, oMissval, oMissval, oMissval, oMissval,
                    oMissval, oMissval, oMissval, oMissval);
                object builtProp = eBook.BuiltinDocumentProperties;
                Type builtPropType = builtProp.GetType();
                for (int i = 1; i <= 50; i++)
                //int i = 1;
                {
                    try
                    {
                        object prop = builtPropType.InvokeMember("Item", BindingFlags.GetProperty, null, builtProp, new object[] { i });
                        Type propType = prop.GetType();
                        object propVal = propType.InvokeMember("Name", BindingFlags.GetProperty, null, prop, new object[] { });
                        Console.WriteLine(String.Format("Name  {0} = {1}", i, propVal));
                        propVal = propType.InvokeMember("Value", BindingFlags.GetProperty, null, prop, new object[] { });
                        Console.WriteLine(String.Format("Value {0} = {1}", i, propVal));
                    }
                    catch
                    {
                        continue;
                    }
                }
            }
            catch
            {
            }
            finally
            {
                // 確実にドキュメントのクローズとExcelを終了させる!
                eBook.Close(oSaveChange, oMissval, oMissval);
                eApp.Quit();
            }
        }
☆PowerPointのメタ情報を取る
        public static void ListPowerPoint()
        {
            string strFile = @"c:\test\test.pptx";
            PowerPoint.Application pwApp = null;
            PowerPoint.Presentation pwPresent = null;
            try
            {
                pwApp = new PowerPoint.Application();
               // pwApp.Visible = MsoTriState.msoFalse;   // PowerPointを非表示にする
                pwPresent = pwApp.Presentations.Open(strFile, MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoFalse);
                object builtProp = pwPresent.BuiltInDocumentProperties;
                Type builtPropType = builtProp.GetType();
                for (int i = 1; i <= 50; i++)
                //int i = 1;
                {
                    try
                    {
                        object prop = builtPropType.InvokeMember("Item", BindingFlags.GetProperty, null, builtProp, new object[] { i });
                        Type propType = prop.GetType();
                        object propVal = propType.InvokeMember("Name", BindingFlags.GetProperty, null, prop, new object[] { });
                        Console.WriteLine(String.Format("Name  {0} = {1}", i, propVal));
                        propVal = propType.InvokeMember("Value", BindingFlags.GetProperty, null, prop, new object[] { });
                        Console.WriteLine(String.Format("Value {0} = {1}", i, propVal));
                    }
                    catch
                    {
                        continue;
                    }
                }
            }
            catch
            {
            }
            finally
            {
                // 確実にドキュメントのクローズとPowerPointを終了させる!
                pwPresent.Close();
                pwApp.Quit();
            }
        }





ラベル:C#
posted by 美華子愛♪ at 19:29| 福島 ☁| Comment(0) | TrackBack(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。