如何在 Microsoft Visual C# .NET 中实现 Microsoft Excel 自动化
生活随笔
收集整理的這篇文章主要介紹了
如何在 Microsoft Visual C# .NET 中实现 Microsoft Excel 自动化
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
本文闡述如何使用 Microsoft Visual C# .NET 為 Microsoft Excel 創(chuàng)建自動化客戶端。 回到頂端
Excel 通過一種對象模型來公開這一程序功能。該對象模型是一些類和方法的集合,這些類和方法充當 Excel 的邏輯組件。例如,有 Application 對象、Workbook 對象和 Worksheet 對象,其中每一種對象都包含 Excel 中那些組件的功能。要從 Visual C# .NET 訪問該對象模型,可以設(shè)置對類型庫的項目引用。
本文將闡述如何為 Visual C# .NET 設(shè)置對 Excel 類型庫的適當項目引用,并提供使 Excel 自動運行的代碼示例。啟動 Microsoft Visual Studio .NET。 在文件菜單上,單擊新建,然后單擊項目。從 Visual C# 項目類型中選擇 Windows 應(yīng)用程序。Form1 是默認創(chuàng)建的窗體。 添加對 Microsoft Excel 對象庫的引用。為此,請按照下列步驟操作: 在項目菜單上,單擊添加引用。 在 COM 選項卡上,找到 Microsoft Excel 對象庫,然后單擊選擇。
注意:Microsoft Office 2003 包含主 Interop 程序集 (PIA)。Microsoft Office XP 不包含 PIA,但您可以下載 PIA。 有關(guān) Office XP PIA 的更多信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應(yīng)的文章: 328912 (http://support.microsoft.com/kb/328912/ ) Microsoft Office XP 主 interop 程序集 (PIA) 可供下載 在添加引用對話框中單擊確定以接受您的選擇。如果系統(tǒng)提示您為選定的庫生成包裝,請單擊是。 在視圖菜單上,選擇工具箱以顯示工具箱,然后向 Form1 添加一個按鈕。 雙擊 Button1。出現(xiàn)該窗體的代碼窗口。 在代碼窗口中,將以下代碼 private void button1_Click(object sender, System.EventArgs e)
{
}
替換為: private void button1_Click(object sender, System.EventArgs e)
{Excel.Application oXL;Excel._Workbook oWB;Excel._Worksheet oSheet;Excel.Range oRng;try{//Start Excel and get Application object.oXL = new Excel.Application();oXL.Visible = true;//Get a new workbook.oWB = (Excel._Workbook)(oXL.Workbooks.Add( Missing.Value ));oSheet = (Excel._Worksheet)oWB.ActiveSheet;//Add table headers going cell by cell.oSheet.Cells[1, 1] = "First Name";oSheet.Cells[1, 2] = "Last Name";oSheet.Cells[1, 3] = "Full Name";oSheet.Cells[1, 4] = "Salary";//Format A1:D1 as bold, vertical alignment = center.oSheet.get_Range("A1", "D1").Font.Bold = true;oSheet.get_Range("A1", "D1").VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;// Create an array to multiple values at once.string[,] saNames = new string[5,2];saNames[ 0, 0] = "John";saNames[ 0, 1] = "Smith";saNames[ 1, 0] = "Tom";saNames[ 1, 1] = "Brown";saNames[ 2, 0] = "Sue";saNames[ 2, 1] = "Thomas";saNames[ 3, 0] = "Jane";saNames[ 3, 1] = "Jones";saNames[ 4, 0] = "Adam";saNames[ 4, 1] = "Johnson";//Fill A2:B6 with an array of values (First and Last Names).oSheet.get_Range("A2", "B6").Value2 = saNames;//Fill C2:C6 with a relative formula (=A2 & " " & B2).oRng = oSheet.get_Range("C2", "C6");oRng.Formula = "=A2 & \" \" & B2";//Fill D2:D6 with a formula(=RAND()*100000) and apply format.oRng = oSheet.get_Range("D2", "D6");oRng.Formula = "=RAND()*100000";oRng.NumberFormat = "$0.00";//AutoFit columns A:D.oRng = oSheet.get_Range("A1", "D1");oRng.EntireColumn.AutoFit();//Manipulate a variable number of columns for Quarterly Sales Data.DisplayQuarterlySales(oSheet);//Make sure Excel is visible and give the user control//of Microsoft Excel's lifetime.oXL.Visible = true;oXL.UserControl = true;}catch( Exception theException ) {String errorMessage;errorMessage = "Error: ";errorMessage = String.Concat( errorMessage, theException.Message );errorMessage = String.Concat( errorMessage, " Line: " );errorMessage = String.Concat( errorMessage, theException.Source );MessageBox.Show( errorMessage, "Error" );}
}private void DisplayQuarterlySales(Excel._Worksheet oWS)
{Excel._Workbook oWB;Excel.Series oSeries;Excel.Range oResizeRange;Excel._Chart oChart;String sMsg;int iNumQtrs;//Determine how many quarters to display data for.for( iNumQtrs = 4; iNumQtrs >= 2; iNumQtrs--){sMsg = "Enter sales data for ";sMsg = String.Concat( sMsg, iNumQtrs );sMsg = String.Concat( sMsg, " quarter(s)?");DialogResult iRet = MessageBox.Show( sMsg, "Quarterly Sales?", MessageBoxButtons.YesNo );if (iRet == DialogResult.Yes)break;}sMsg = "Displaying data for ";sMsg = String.Concat( sMsg, iNumQtrs );sMsg = String.Concat( sMsg, " quarter(s)." );MessageBox.Show( sMsg, "Quarterly Sales" );//Starting at E1, fill headers for the number of columns selected.oResizeRange = oWS.get_Range("E1", "E1").get_Resize( Missing.Value, iNumQtrs);oResizeRange.Formula = "=\"Q\" & COLUMN()-4 & CHAR(10) & \"Sales\"";//Change the Orientation and WrapText properties for the headers.oResizeRange.Orientation = 38;oResizeRange.WrapText = true;//Fill the interior color of the headers.oResizeRange.Interior.ColorIndex = 36;//Fill the columns with a formula and apply a number format.oResizeRange = oWS.get_Range("E2", "E6").get_Resize( Missing.Value, iNumQtrs);oResizeRange.Formula = "=RAND()*100";oResizeRange.NumberFormat = "$0.00";//Apply borders to the Sales data and headers.oResizeRange = oWS.get_Range("E1", "E6").get_Resize( Missing.Value, iNumQtrs);oResizeRange.Borders.Weight = Excel.XlBorderWeight.xlThin;//Add a Totals formula for the sales data and apply a border.oResizeRange = oWS.get_Range("E8", "E8").get_Resize( Missing.Value, iNumQtrs);oResizeRange.Formula = "=SUM(E2:E6)";oResizeRange.Borders.get_Item( Excel.XlBordersIndex.xlEdgeBottom ).LineStyle = Excel.XlLineStyle.xlDouble;oResizeRange.Borders.get_Item( Excel.XlBordersIndex.xlEdgeBottom ).Weight = Excel.XlBorderWeight.xlThick;//Add a Chart for the selected data.oWB = (Excel._Workbook)oWS.Parent;oChart = (Excel._Chart)oWB.Charts.Add( Missing.Value, Missing.Value, Missing.Value, Missing.Value );//Use the ChartWizard to create a new chart from the selected data.oResizeRange = oWS.get_Range("E2:E6", Missing.Value ).get_Resize( Missing.Value, iNumQtrs);oChart.ChartWizard( oResizeRange, Excel.XlChartType.xl3DColumn, Missing.Value,Excel.XlRowCol.xlColumns, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value );oSeries = (Excel.Series)oChart.SeriesCollection(1);oSeries.XValues = oWS.get_Range("A2", "A6");for( int iRet = 1; iRet <= iNumQtrs; iRet++){oSeries = (Excel.Series)oChart.SeriesCollection(iRet);String seriesName;seriesName = "=\"Q";seriesName = String.Concat( seriesName, iRet );seriesName = String.Concat( seriesName, "\"" );oSeries.Name = seriesName;} oChart.Location( Excel.XlChartLocation.xlLocationAsObject, oWS.Name );//Move the chart so as not to cover your data.oResizeRange = (Excel.Range)oWS.Rows.get_Item(10, Missing.Value );oWS.Shapes.Item("Chart 1").Top = (float)(double)oResizeRange.Top;oResizeRange = (Excel.Range)oWS.Columns.get_Item(2, Missing.Value );oWS.Shapes.Item("Chart 1").Left = (float)(double)oResizeRange.Left;
}
滾動到代碼窗口的頂部。將下面的代碼行添加到 using 指令列表的末尾: using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
按 F5 生成并運行該程序。 在窗體上,單擊 Button1。該程序?qū)?Excel 并將數(shù)據(jù)填充到一個新的工作表中。 在提示您輸入季度銷售數(shù)據(jù)時,單擊是。一個鏈接到季度數(shù)據(jù)的圖表就會被添加到工作表中。 回到頂端
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx (http://msdn.microsoft.com/library/en-us/dnoxpta/html/vsofficedev.asp) 回到頂端
更多信息
通過自動化過程,使用諸如 Visual C# .NET 這樣的語言編寫的應(yīng)用程序就可以用編程方式來控...
通過自動化過程,使用諸如 Visual C# .NET 這樣的語言編寫的應(yīng)用程序就可以用編程方式來控制其他應(yīng)用程序。利用 Excel 的自動化功能,您可以執(zhí)行諸如新建工作簿、向工作簿添加數(shù)據(jù)或創(chuàng)建圖表等操作。對于 Excel 和其他 Microsoft Office 應(yīng)用程序,幾乎所有可以通過用戶界面手動執(zhí)行的操作也都可以通過使用"自動化"功能以編程方式來執(zhí)行。
Excel 通過一種對象模型來公開這一程序功能。該對象模型是一些類和方法的集合,這些類和方法充當 Excel 的邏輯組件。例如,有 Application 對象、Workbook 對象和 Worksheet 對象,其中每一種對象都包含 Excel 中那些組件的功能。要從 Visual C# .NET 訪問該對象模型,可以設(shè)置對類型庫的項目引用。
本文將闡述如何為 Visual C# .NET 設(shè)置對 Excel 類型庫的適當項目引用,并提供使 Excel 自動運行的代碼示例。
為 Microsoft Excel 創(chuàng)建自動化客戶端
注意:Microsoft Office 2003 包含主 Interop 程序集 (PIA)。Microsoft Office XP 不包含 PIA,但您可以下載 PIA。 有關(guān) Office XP PIA 的更多信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應(yīng)的文章: 328912 (http://support.microsoft.com/kb/328912/ ) Microsoft Office XP 主 interop 程序集 (PIA) 可供下載
對自動化客戶端進行測試
參考
有關(guān)更多信息,請訪問下面的 Microsoft Developer Network (MSDN) 網(wǎng)站: Microsoft Office Developmen...
有關(guān)更多信息,請訪問下面的 Microsoft Developer Network (MSDN) 網(wǎng)站: Microsoft Office Development with Visual Studio(使用 Visual Studio 進行 Microsoft Office 開發(fā))
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx (http://msdn.microsoft.com/library/en-us/dnoxpta/html/vsofficedev.asp) 回到頂端
這篇文章中的信息適用于:
- Microsoft Visual C# .NET 2003 標準版
- Microsoft Visual C# .NET 2002 標準版
- Microsoft Office Excel 2003
- Microsoft Excel 2002 標準版
- 及更高版本
轉(zhuǎn)載于:https://www.cnblogs.com/vibratea/archive/2009/07/27/1531882.html
總結(jié)
以上是生活随笔為你收集整理的如何在 Microsoft Visual C# .NET 中实现 Microsoft Excel 自动化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转]FlashSocket通信安全策略
- 下一篇: 《Man Vs wild》 Notes-