<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 演練:Office 編程(C# 和 Visual Basic) Visual Studio 2010 在 C# 和 Visual Basic 中引入了改進 Microsoft Office 編程的新功能。每種語言都增加了其他語言中已經存在的功能。 C# 中的新功能包括命名參數和可選參數、具有 **dynamic** 類型的返回值,以及在 COM 編程中忽略 **ref** 關鍵字和訪問索引屬性的功能。Visual Basic 中的新功能包括自動實現的屬性、Lambda 表達式語句和集合初始值設定項。 兩種語言都支持嵌入類型信息,從而允許在不向用戶的計算機部署主互操作程序集 (PIA) 的情況下部署與 COM 組件交互的程序集。有關詳細信息,請參閱[演練:嵌入托管程序集中的類型(C# 和 Visual Basic)](https://msdn.microsoft.com/zh-CN/library/dd409610.aspx)。 本演練演示 Office 編程環境中的新功能,但這些新功能在常規編程中也極為有用。在本演練中,你將首先使用 Excel 外接應用程序來創建 Excel 工作簿。然后,你將創建包含工作簿鏈接的 Word 文檔。最后,你將看到可以如何開啟和關閉 PIA 依賴項。 ## 系統必備 若要完成本演練,你的計算機上必須安裝有 Microsoft Office Excel 2013(或者 2007 或更高版本)和 Microsoft Office Word 2013(或者 2007 或更高版本)。 如果你使用的操作系統早于 Windows Vista,請確保安裝 .NET Framework 2.0。 | ![](https://box.kancloud.cn/2016-01-31_56adb62c1380a.jpg) 注意 | | :-- | | 以下說明中的某些 Visual Studio 用戶界面元素在計算機上出現的名稱或位置可能會不同。 這些元素取決于你所使用的 Visual Studio 版本和你所使用的設置。 有關詳細信息,請參閱[個性化 Visual Studio IDE](https://msdn.microsoft.com/zh-CN/library/mt269425.aspx)。 | ## 設置 Excel 外接應用程序 1. 啟動 Visual Studio。 2. 在**“文件”**菜單上,指向**“新建”**,然后單擊**“項目”**。 3. 在“安裝的模板”窗格中,展開“Visual Basic”或“Visual C#”,再展開“Office”,然后單擊“2013”(或“2010”或“2007”)。 4. 在“模板”窗格中,單擊“Excel 2013 外接應用程序”(或“Excel 2010 外接應用程序”或“Excel 2007 外接應用程序”)。 5. 查看“模板”窗格的頂部,確保“.NET Framework 4”或更高版本出現在“目標框架”框中。 6. 如果需要,在“名稱”框中鍵入項目的名稱。 7. 單擊“確定”。 8. 新項目將出現在“解決方案資源管理器”中。 ## 添加引用 1. 在“解決方案資源管理器”中,右鍵單擊你的項目名稱,然后單擊“添加引用”。將顯示**“添加引用”**對話框。 2. 在“程序集”選項卡上,在“組件名稱”列表中選擇“Microsoft.Office.Interop.Excel”版本 15.0.0.0(針對 Excel 2010,選擇版本 14.0.0.0;針對 Excel 2007,選擇版本 12.0.0.0),然后按住 Ctrl 鍵并選擇“Microsoft.Office.Interop.Word”版本 15.0.0.0(針對 Word 2010,選擇版本 14.0.0.0;針對 Word 2007,選擇版本 12.0.0.0)。如果未看到程序集,你可能需要確保安裝并顯示它們(參閱[如何:安裝 Office 主互操作程序集](https://msdn.microsoft.com/zh-CN/library/kh3965hw.aspx))。 3. 單擊“確定”。 ## 添加必要的 Imports 語句或 using 指令 1. 在“解決方案資源管理器”中,右鍵單擊“ThisAddIn.vb”或“ThisAddIn.cs”文件,然后單擊“查看代碼”。 2. 將以下 **Imports** 語句 (Visual Basic) 或 **using** 指令 (C#) 添加到代碼文件的頂部(如果不存在)。 [VB](https://msdn.microsoft.com/zh-CN/library/ee342218.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1) ``` using System.Collections.Generic; using Excel = Microsoft.Office.Interop.Excel; using Word = Microsoft.Office.Interop.Word; ``` ## 創建銀行帳戶列表 1. 在“解決方案資源管理器”中,右鍵單擊你的項目名稱,單擊“添加”,然后單擊“類”。如果使用的是 Visual Basic,則將類命名為 Account.vb;如果使用的是 C#,則將類命名為 Account.cs。單擊**“添加”**。 2. 將 Account 類的定義替換為以下代碼。類定義使用_“自動實現的屬性”_,在 Visual Studio 2010 中,是 Visual Basic 的新功能。有關詳細信息,請參閱[自動實現的屬性 (Visual Basic)](https://msdn.microsoft.com/zh-CN/library/dd293589.aspx)。 [VB](https://msdn.microsoft.com/zh-CN/library/ee342218.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2) ``` class Account { public int ID { get; set; } public double Balance { get; set; } } ``` 3. 若要創建包含兩個帳戶的 bankAccounts 列表,請將以下代碼添加到 ThisAddIn.vb 或 ThisAddIn.cs 中的 ThisAddIn_Startup 方法。列表聲明使用_“集合初始值設定項”_,在 Visual Studio 2010 中,是 Visual Basic 的新功能。有關詳細信息,請參閱[集合初始值設定項 (Visual Basic)](https://msdn.microsoft.com/zh-CN/library/dd293617.aspx)。 [VB](https://msdn.microsoft.com/zh-CN/library/ee342218.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-3) ``` var bankAccounts = new List&lt;Account&gt; { new Account { ID = 345, Balance = 541.27 }, new Account { ID = 123, Balance = -127.44 } }; ``` ## 將數據導出到 Excel 1. 在相同的文件中,將以下方法添加到 ThisAddIn 類。該方法設置 Excel 工作薄并將數據導出到工作簿。 [VB](https://msdn.microsoft.com/zh-CN/library/ee342218.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-4) ``` void DisplayInExcel(IEnumerable&lt;Account&gt; accounts, Action&lt;Account, Excel.Range&gt; DisplayFunc) { var excelApp = this.Application; // Add a new Excel workbook. excelApp.Workbooks.Add(); excelApp.Visible = true; excelApp.Range["A1"].Value = "ID"; excelApp.Range["B1"].Value = "Balance"; excelApp.Range["A2"].Select(); foreach (var ac in accounts) { DisplayFunc(ac, excelApp.ActiveCell); excelApp.ActiveCell.Offset[1, 0].Select(); } // Copy the results to the Clipboard. excelApp.Range["A1:B3"].Copy(); } ``` 此方法使用 C# 的兩項新功能。Visual Basic 中已存在這兩項功能。 * 方法 [Add](http://go.microsoft.com/fwlink/?LinkId=210910) 有一個_“可選參數”_,用于指定特定的模板。如果希望使用形參的默認值,你可以借助可選形參(Visual C# 2010 中新增)忽略該形參的實參。由于上一個示例中未發送任何參數,**Add** 將使用默認模板并創建新的工作簿。C# 早期版本中的等效語句要求占位符參數:excelApp.Workbooks.Add(Type.Missing). 有關詳細信息,請參閱[命名實參和可選實參(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/dd264739.aspx)。 * [Range](http://go.microsoft.com/fwlink/?LinkId=210911) 對象的 **Range** 和 **Offset** 屬性使用_“索引屬性”_功能。此功能允許你通過以下典型 C# 語法從 COM 類型使用這些屬性。索引屬性還允許你使用 **Range** 對象的 **Value** 屬性,因此不必使用 **Value2** 屬性。 **Value** 屬性已編入索引,但索引是可選的。在以下示例中,可選參數和索引屬性配合使用。 ``` // Visual C# 2010 provides indexed properties for COM programming. excelApp.Range["A1"].Value = "ID"; excelApp.ActiveCell.Offset[1, 0].Select(); ``` 在早期版本的語言中,需要以下特殊語法。 ``` // In Visual C# 2008, you cannot access the Range, Offset, and Value // properties directly. excelApp.get_Range("A1").Value2 = "ID"; excelApp.ActiveCell.get_Offset(1, 0).Select(); ``` 你不能創建自己的索引屬性。該功能僅支持使用現有索引屬性。 有關詳細信息,請參閱[如何:在 COM 互操作編程中使用索引屬性(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/ee310208.aspx)。 2. 在 DisplayInExcel 的末尾添加以下代碼以將列寬調整為適合內容。 [VB](https://msdn.microsoft.com/zh-CN/library/ee342218.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-7) ``` excelApp.Columns[1].AutoFit(); excelApp.Columns[2].AutoFit(); ``` 這些添加展示 C# 2010 中的另一項新功能:處理從 COM 主機返回的 **Object** 值(如 Office),就像它們具有 [dynamic](https://msdn.microsoft.com/zh-CN/library/dd264741.aspx) 類型一樣。當“嵌入互操作類型”設置為其默認值 **True** 時,或者由 [/link](https://msdn.microsoft.com/zh-CN/library/dd264728.aspx) 編譯器選項引用程序集時,自動發生這種情況。鍵入 **dynamic** 允許后期綁定(Visual Basic 已提供該功能)并可避免 Visual C# 2008 和早期版本的語言中要求的顯式強制轉換。 例如,excelApp.Columns[1] 返回 **Object**,并且 **AutoFit** 是 Excel 的 [Range](http://go.microsoft.com/fwlink/?LinkId=210911) 方法。如果沒有 **dynamic**,你必須將 excelApp.Columns[1] 返回的對象強制轉換為 Range 的實例,然后才能調用 AutoFit 方法。 ``` // Casting is required in Visual C# 2008. ((Excel.Range)excelApp.Columns[1]).AutoFit(); // Casting is not required in Visual C# 2010. excelApp.Columns[1].AutoFit(); ``` 有關嵌入互操作類型的詳細信息,請參閱本主題后面部分的“查找 PIA 引用”和“還原 PIA 依賴項”程序。有關 **dynamic** 的詳細信息,請參閱 [dynamic(C# 參考)](https://msdn.microsoft.com/zh-CN/library/dd264741.aspx) 或 [使用類型 dynamic(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/dd264736.aspx)。 ## 調用 DisplayInExcel 1. 在 ThisAddIn_StartUp 方法的末尾添加以下代碼。對 DisplayInExcel 的調用包含兩個參數。第一個參數是要處理的帳戶列表的名稱。第二個參數是定義如何處理數據的多行 lambda 表達式。每個帳戶的 ID 和 balance 值都顯示在相鄰的單元格中,如果余額小于零,則相應的行顯示為紅色。多行 lambda 表達式是 Visual Basic 2010 中的新功能。有關詳細信息,請參閱[Lambda 表達式 (Visual Basic)](https://msdn.microsoft.com/zh-CN/library/bb531253.aspx)。 [VB](https://msdn.microsoft.com/zh-CN/library/ee342218.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-9) ``` DisplayInExcel(bankAccounts, (account, cell) =&gt; // This multiline lambda expression sets custom processing rules // for the bankAccounts. { cell.Value = account.ID; cell.Offset[0, 1].Value = account.Balance; if (account.Balance &lt; 0) { cell.Interior.Color = 255; cell.Offset[0, 1].Interior.Color = 255; } }); ``` 2. 若要運行程序,請按 F5。出現包含帳戶數據的 Excel 工作表。 ## 添加 Word 文檔 1. 在 ThisAddIn_StartUp 方法末尾添加以下代碼,以創建包含指向 Excel 工作簿的鏈接的 Word 文檔。 [VB](https://msdn.microsoft.com/zh-CN/library/ee342218.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-10) ``` var wordApp = new Word.Application(); wordApp.Visible = true; wordApp.Documents.Add(); wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true); ``` 此代碼展示 C# 中的幾項新功能:在 COM 編程中忽略 **ref** 的功能、命名參數以及可選參數。Visual Basic 中已存在這些功能。 [PasteSpecial](http://go.microsoft.com/fwlink/?LinkId=147099) 方法有七個參數,每個參數都是可選引用參數。在 Visual C# 2010 之前,你必須為這七個形參定義用作實參的對象變量,即使你沒有有意義的值發送。通過命名實參和可選實參,你可以指定希望按名稱訪問的形參并僅將實參發送到這些形參。在本示例中,發送實參以指示應創建指向剪貼板上工作簿的鏈接(形參 Link)并指示該鏈接應在 Word 文檔中顯示為圖標(形參 DisplayAsIcon)。Visual C# 2010 還允許你忽略這些參數的 **ref** 關鍵字。將 Visual C# 2008 的以下代碼段與 Visual C# 2010 中需要的單行進行比較: ``` // Call to PasteSpecial in Visual C# 2008. object iconIndex = Type.Missing; object link = true; object placement = Type.Missing; object displayAsIcon = true; object dataType = Type.Missing; object iconFileName = Type.Missing; object iconLabel = Type.Missing; wordApp.Selection.PasteSpecial(ref iconIndex, ref link, ref placement, ref displayAsIcon, ref dataType, ref iconFileName, ref iconLabel); // Call to PasteSpecial in Visual C# 2010. wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true); ``` ## 運行應用程序 1. 按 F5 運行該應用程序。Excel 啟動并顯示包含 bankAccounts 中兩個帳戶的信息的表。然后,出現包含指向 Excel 表的 Word 文檔。 ## 清理已完成的項目 1. 在 Visual Studio 中,單擊“生成”菜單上的“清理解決方案”。否則,每次在計算機上打開 Excel 時都會運行外接應用程序。 ## 查找 PIA 引用 1. 再次運行應用程序,但不單擊“清理解決方案”。 2. 在“開始”菜單上,單擊“所有程序”。接下來依次單擊“Microsoft Visual Studio 2013”、“Visual Studio 工具”、“Visual Studio 命令提示符 (2013)”。 3. 在 Visual Studio 命令提示符 (2013) 窗口中鍵入 **ildasm**,然后按 Enter。此時將出現 IL DASM 窗口。 4. 在 IL DASM 窗口的“文件”菜單上,單擊“打開”。雙擊“Visual Studio 2013”,然后雙擊“項目”。打開項目的文件夾,在 bin/Debug 文件夾中查找 _項目名稱_.dll。雙擊 _項目名稱_.dll。新窗口將顯示項目的屬性以及對其他模塊和程序集的引用。注意,命名空間 **Microsoft.Office.Interop.Excel** 和 **Microsoft.Office.Interop.Word** 包含在程序集中。在 Visual Studio 2013 中,編譯器默認將你需要的類型從引用的 PIA 導入程序集。 有關詳細信息,請參閱[如何:查看程序集內容](https://msdn.microsoft.com/zh-CN/library/ceats605.aspx)。 5. 雙擊“清單”圖標。此時將出現包含程序集列表的窗口,這些程序集包含項目所引用的項。 **Microsoft.Office.Interop.Excel** 和 **Microsoft.Office.Interop.Word** 未包含在列表中。由于項目需要的類型已導入程序集中,因此不需要引用 PIA。這使得部署變得更加容易。用戶的計算機上不必存在 PIA,因為應用程序不需要部署特定版本的 PIA,應用程序可設計為與多個版本的 Office 配合使用,前提是所有版本中都存在必要的 API。 由于不再需要部署 PIA,你可以提前創建可與多個版本的 Office(包括之前的版本)配合使用的應用程序。但是,僅當你的代碼不使用你當前所使用 Office 版本中不可用的任何 API 時,此情況才適用。特殊 API 在早期版本中是否可用并不始終明確,因此不建議使用早期版本的 Office。 6. 關閉清單窗口和程序集窗口。 | ![](https://box.kancloud.cn/2016-01-31_56adb62c1380a.jpg) 注意 | | :-- | | 在 Office 2003 以前,Office 并不發布 PIA。因此,生成適用于 Office 2002 或早期版本的互操作程序集的唯一方法是導入 COM 引用。 | ## 還原 PIA 依賴項 1. 在“解決方案資源管理器”中,單擊“顯示所有文件”按鈕。展開“引用”文件夾并選擇“Microsoft.Office.Interop.Excel”。按 F4 以顯示**“屬性”**窗口。 2. 在“屬性”窗口中,將“嵌入互操作類型”屬性從“True”更改為“False”。 3. 對 **Microsoft.Office.Interop.Word** 重復此程序中的步驟 1 和 2。 4. 在 C# 中,在 DisplayInExcel 方法的末尾注釋掉對 Autofit 的兩次調用。 5. 按 F5 以驗證項目是否仍正確運行。 6. 重復上一個程序的步驟 1-3 以打開程序集窗口。注意,**Microsoft.Office.Interop.Word** 和 **Microsoft.Office.Interop.Excel** 不再位于嵌入程序集列表中。 7. 雙擊“清單”圖標并滾動引用程序集的列表。 **Microsoft.Office.Interop.Word** 和 **Microsoft.Office.Interop.Excel** 均位于列表中。由于應用程序引用 Excel 和 Word PIA 并且“嵌入互操作類型”屬性設置為“False”,因此最終用戶的計算機上必須存在兩個程序集。 8. 在 Visual Studio 中,單擊“生成”菜單上的“清理解決方案”以清理完成的項目。 ## 請參閱 [自動實現的屬性 (Visual Basic)](https://msdn.microsoft.com/zh-CN/library/dd293589.aspx) [自動實現的屬性(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/bb384054.aspx) [集合初始值設定項 (Visual Basic)](https://msdn.microsoft.com/zh-CN/library/dd293617.aspx) [對象和集合初始值設定項(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/bb384062.aspx) [可選參數 (Visual Basic)](https://msdn.microsoft.com/zh-CN/library/f25e2b6b.aspx) [按位置和名稱傳遞參數 (Visual Basic)](https://msdn.microsoft.com/zh-CN/library/51wfzyw0.aspx) [命名實參和可選實參(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/dd264739.aspx) [早期綁定和后期綁定 (Visual Basic)](https://msdn.microsoft.com/zh-CN/library/0tcf61s1.aspx) [dynamic(C# 參考)](https://msdn.microsoft.com/zh-CN/library/dd264741.aspx) [使用類型 dynamic(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/dd264736.aspx) [Lambda 表達式 (Visual Basic)](https://msdn.microsoft.com/zh-CN/library/bb531253.aspx) [Lambda 表達式(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/bb397687.aspx) [如何:在 COM 互操作編程中使用索引屬性(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/ee310208.aspx) [演練:嵌入 Microsoft Office 程序集中的類型信息(C# 和 Visual Basic)](https://msdn.microsoft.com/zh-CN/library/ee317478.aspx) [演練:嵌入托管程序集中的類型(C# 和 Visual Basic)](https://msdn.microsoft.com/zh-CN/library/dd409610.aspx) [演練:創建你的第一個 Excel VSTO 外接程序](https://msdn.microsoft.com/zh-CN/library/cc668205.aspx) [COM 互操作 (Visual Basic)](https://msdn.microsoft.com/zh-CN/library/6bw51z5z.aspx) [互操作性(C# 編程指南)](https://msdn.microsoft.com/zh-CN/library/ms173184.aspx)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看