5

私は Outlook アドインに取り組んでおり、最近慣れるために C# に切り替えました (私は根っからの Java マンです)。この時点で、メール フォルダーを反復処理し、各メッセージの件名をコンソールに出力しようとしています。これは主に、これまでのところすべてが正常に機能していることを確認する方法です。ただし、実行するたびに、次のエラーが表示されます。

操作を完了できませんでした。1 つ以上のパラメーター値が無効です。

例外テキスト:

System.ArgumentException: 操作を完了できませんでした。1 つ以上のパラメーター値が無効です。Microsoft.Office.Interop.Outlook.NameSpaceClass.GetFolderFromID (文字列 EntryIDFolder、オブジェクト EntryIDStore) で OutlookAddIn2.ThisAddIn.ThisAddIn_Startup (オブジェクトの送信者、EventArgs e) で Microsoft.Office.Tools.AddInImpl.OnStartup() で Microsoft.Office.Tools .AddInImpl.AddInExtensionImpl.Microsoft.Office.Tools.EntryPoint.OnStartup()、Microsoft.Office.Tools.AddInBase.OnStartup()、OutlookAddIn2.ThisAddIn.FinishInitialization()、Microsoft.Office.Tools.AddInBase.Microsoft.Office.Tools .EntryPoint.FinishInitialization() Microsoft.VisualStudio.Tools.Office.Runtime.DomainCreator.ExecuteCustomization.ExecutePhase(ExecutionPhases executionPhases) で Microsoft.VisualStudio.Tools.Office.Runtime.

読み込まれたアセンブリ:

これは、ユーザーにフォルダーを選択させるために MSDN で Microsoft が推奨している正確な方法であるため、これにはやや困惑しています。ソースを含めました。ご意見がありましたらお知らせください。この投稿を読んでくれてありがとう、そして喜んで手伝ってくれてありがとう!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;

namespace OutlookAddIn2
{
    public partial class ThisAddIn
    {
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            //Get application namespace and grab the original folder object
            Outlook.Folder pickFolder = (Outlook.Folder)Application.Session.PickFolder();

            //Outlook.Folder mrFolder = Application.Session.GetFolderFromID(pickFolder.EntryID, pickFolder.StoreID) as Outlook.Folder;

            foreach (Outlook.MailItem oMailItem in pickFolder.Items)
            {
                Console.WriteLine(oMailItem.Subject);
            }
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }

        #endregion
    }
}
4

4 に答える 4

1

これをトレイします:

 public static Folder FOLDER_1;
 public static Folder FOLDER_2;
 public static Folder FOLDER_N;

/// <summary>
        /// Hilo que lee el archivo de datos PST del OUTLOOK
       private static void readPst()
        {
            try
            {
                Application app = new Application();
                NameSpace outlookNs = app.GetNamespace("MAPI");
                MAPIFolder mf = outlookNs.GetDefaultFolder(OlDefaultFolders.olFolderTasks);


                string names = mf.FolderPath.Split('\\')[2];



                Folder fMails = getFolder(fCarpetasPersonales.Folders, "Inbox");



                FOLDER_1= getFolder(fMails.Folders, "FOLDER_1");
                FOLDER_2= getFolder(fMails.Folders, "FOLDER_2");
                FOLDER_N= getFolder(fMails.Folders, "FOLDER_n");

//TO DO... For example:  foreach (object item in fMails.Items)



     private static Folder getFolder(Folders folders, string folder)
        {
            foreach (object item in folders)
            {
                if (item is Folder)
                {
                    Folder f = (Folder)item;
                    if (f.Name.Equals(folder))
                    {
                        return f;
                    }
                }
            }
            return null;
        }    
于 2012-08-08T19:49:57.277 に答える
0

@SilverNinjaが指摘したように、デバッガーでコードをステップスルーしたかどうかは明らかではありません。StoreIDとEntryIDが有効であることを確認することが重要です。

別のいくつかの可能性があります:

OutlookPSTが少し壊れています。scanPSTを試して、それが役立つかどうかを確認してください。

また、pickFolder列挙はこれらをスキップするのに十分賢いと思うでしょうが、フォルダーツリーのトップレベルにフォルダー以外のアイテムがありますか?私は実際に連絡先を列挙し、連絡先フォルダに非連絡先アイテムがあるというこの問題を抱えています。

于 2012-11-28T19:14:34.857 に答える
0

もちろん、受信トレイフォルダが必要な場合は、これを試すことができますか?

Outlook.Application app = new Outlook.Application();

Outlook.NameSpace ns = app.GetNamespace("MAPI");

Outlook.Folder folder = app.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox) as Outlook.Folder;
于 2012-07-10T15:36:50.093 に答える
0

およびの値を確認するには、トレース ステートメントをデバッグまたは追加する必要がpickFolder.EntryIDありpickFolder.StoreIDます。有効でないと、EntryIDこのStoreIDエラーがスローされます。

Trace.TraceInformation("EntryID: {0}\tStoreID: {1}", pickFolder.EntryID, pickFolder.StoreID);

ユーザーがキャンセルボタンをpickFolderクリックした場合に nullかどうかを確認する必要があります。

また、ユーザーにフォルダーを選択させる場合は、フォルダーを再度選択する必要はありませんGetFolderFromID。既にフォルダーへの参照があります。

于 2012-07-10T15:36:33.127 に答える