65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 J# .NET 控制 Excel 2003 的简介

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.96/5 (15投票s)

2004年11月14日

4分钟阅读

viewsIcon

143687

downloadIcon

280

一篇关于如何使用 J# .NET 控制 MSFT Excel 2003 的文章

Sample Image - JExcel.jpg

引言

在本文中,我们将重点介绍如何通过 COM 自动化使用 J# 语言控制 Microsoft Excel 2003。我们将目标定为 .NET 框架 1.1 版本(Visual Studio 2003)。

打开 Visual Studio 并选择一个新的 J# Windows 应用程序。

添加对“Microsoft Excel 11.0 Object Library”的引用。

向应用程序添加一个 Button 和一个 PictureBox Win form 控件。单击 Button 两次以实现按钮处理程序。

应用程序实例

最重要的类是 applicationworkbookworksheetrange 类。application 类表示带有工作簿的 Excel 应用程序。Workbook 包含带有单元格的 worksheet。单元格可以用 range 表示。

要打开 Excel 实例,请输入

    Microsoft.Office.Interop.Excel.ApplicationClass excel =
       new Microsoft.Office.Interop.Excel.ApplicationClass();

这不会在桌面上显示 Excel,而是将其在后台运行。如果要使其在桌面上可见,请将以下属性设置为 true。除了 Excel 将在桌面上可见之外,没有其他区别。这在调试时可能很有用。

excel.set_Visible( true );

如果要退出 Excel,请输入

excel.Quit();

一个非常重要的属性,可以使您的系统运行得更快,那就是在进行操作时禁用屏幕更新。在完成后启用屏幕更新非常重要。Excel 不会为您执行此操作。请记住在代码中切换屏幕更新,无论是否发生异常。

    try 
    {
        excel.set_ScreenUpdating( false );
        // ... do excel operations here
    } 
    finally
    {
        excel.set_ScreenUpdating( true );
    }

另一个非常重要的属性是 alert 属性。此属性控制 Excel 是否显示警告对话框,例如,如果您在退出 Excel 前忘记保存工作簿时出现的“另存为”对话框。就像屏幕更新属性一样,alert 属性在您完成后也不会为您重置。

    try 
    {
        excel.set_DisplayAlerts( false );
        // do excel operations here...
    }
    finally
    {
        excel.set_DisplayAlerts( true );
    }

Excel 还有其他几个显示属性,您可能想了解一下。在 Visual Studio IDE 中,输入 excel.set_D 以显示所有属性。

如果您希望用户能够编辑工作簿,请执行以下命令

    excel.set_UserControl( true );

工作簿

正如您可能已经发现的,没有工作簿您无法进行太多工作。工作簿集合使您可以打开新工作簿、保存工作簿以及执行其他重要操作。

打开新工作簿

要打开新工作簿,请执行以下操作

    Microsoft.Office.Interop.Excel.Workbook workbook = 
        excel.get_Workbooks().Add(System.Reflection.Missing.Value );

关闭工作簿

当您想关闭工作簿时,请输入

    workbook.Close( 
        System.Reflection.Missing.Value,
        System.Reflection.Missing.Value, 
        System.Reflection.Missing.Value );

这将假定您不想保存对工作簿的任何更改。如果您对工作簿进行了任何更改,可以使用此命令关闭它并保存任何更改

    workbook.Close( (System.Boolean)true, "C:\\test.xls", 
        System.Type.Missing );

请注意 Java 布尔类型的 .NET 装箱。第二个参数是文件名。

保存、另存为和另存为副本

要保存工作簿,只需调用

    workbook.Save();

更高级的保存调用是 SaveAs。此调用使您可以指定文件名和路径、文件格式、密码、文件访问模式等。此示例将工作簿以 Excel 格式保存在 C:\test.xls 中,无密码。

    workbook.SaveAs( "c:\\test.xls",
        Microsoft.Office.Interop.Excel.XlFileFormat.xlXMLSpreadsheet,
        System.Reflection.Missing.Value,
        System.Reflection.Missing.Value,
        System.Reflection.Missing.Value,
        System.Reflection.Missing.Value,
        Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
        System.Reflection.Missing.Value,
        System.Reflection.Missing.Value,
        System.Reflection.Missing.Value,
        System.Reflection.Missing.Value,
        System.Reflection.Missing.Value );

如果您想在不更改工作簿实例名称的情况下保存副本,只需执行 SaveCopyAs 调用

workbook.SaveCopyAs( "c:\\copy.xls" );

打印工作簿

我们有两个有用的打印方法:预览和打印。preview 方法将显示一个窗口,显示纸张的外观。print 方法将在打印机上打印工作簿中指定的页面。

preview 方法如下。请注意 Java 布尔值的 .NET 装箱。

    workbook.PrintPreview( (System.Boolean)false );

如果您想打印工作簿

    workbook.PrintOut( From page, To page, Copies, Preview, 
        ActivePrinter, PrintToFile, Collate, PrToFilename );

计算工作簿

有时通过一个命令计算所有工作簿很有用。这可以通过以下命令完成

    excel.Calculate();

工作表

工作表包含单元格并位于工作簿内。您可以使用 get_Activesheet() 命令获取对活动工作表的引用。

    Microsoft.Office.Interop.Excel.Worksheet sheet =
        excel.get_ActiveSheet();

在单元格中填充数据

有许多方法可以填充工作表中的单元格。一种方法是使用二维数组。

示例一

要将数字 1 到 10 填充到 A1J1 中,请执行以下操作

        int values[,] = new int[1,10];
        values[0,0] = 1;
        values[0,1] = 2;
        values[0,2] = 3;
        values[0,3] = 4;
        values[0,4] = 5;
        values[0,5] = 6;
        values[0,6] = 7;
        values[0,7] = 8;
        values[0,8] = 9;
        values[0,9] = 10;
        sheet.get_Range("A1", "J1").set_Value2( values );

示例二

代码将如下所示

        int values[,] = new int[10,1];
        values[0,0] = 1;
        values[1,0] = 2;
        values[2,0] = 3;
        values[3,0] = 4;
        values[4,0] = 5;
        values[5,0] = 6;
        values[6,0] = 7;
        values[7,0] = 8;
        values[8,0] = 9;
        values[9,0] = 10;
        sheet.get_Range("A1", "A10").set_Value2( values );

示例三

在此示例中,我们将创建一个 10x10 的工作表,其中包含一个文本标题和 10x9 的随机整数数组。

        String headline[,] = new String[1,10];
        headline[0,0] = new String("Dave");
        headline[0,1] = new String("Tom");
        headline[0,2] = new String("Thomas");
        headline[0,3] = new String("Michael");
        headline[0,4] = new String("Bob");
        headline[0,5] = new String("John");
        headline[0,6] = new String("Peter");
        headline[0,7] = new String("Lars");
        headline[0,8] = new String("Jay");
        headline[0,9] = new String("Brian");
        sheet.get_Range("A1", "J10").set_Value2( headline );

        int value[,] = new int[9,10];
        System.Random random = new System.Random( );
        for( int counterA = 0; counterA < 9 ; counterA++ )
            for( int counterB = 0; counterB < 10; counterB++ )
                value[counterA, counterB] = random.Next(100);
        sheet.get_Range("A2", "J10").set_Value2( value );

公式

此示例将对 A2 到 A10(B2 到 B10、C2 到 C10 等)中的所有数字进行求和,并将结果存储在 A11B11C11 等)中,文本为粗体。

    Microsoft.Office.Interop.Excel.Font font = 
            sheet.get_Range("A11", "J11").get_Font();
    font.set_Bold( (System.Boolean)true );
    sheet.get_Range("A11", "J11").set_Formula("=SUM(A2..A10)");

Charts

图表对于以图形方式显示信息很有用。要打开新图表,请执行

    Microsoft.Office.Interop.Excel.Chart chart = 
        (Microsoft.Office.Interop.Excel.Chart)excel.get_Charts().Add( 
            System.Reflection.Missing.Value, 
            System.Reflection.Missing.Value, 
            System.Reflection.Missing.Value, 
            System.Reflection.Missing.Value );


    chart.ChartWizard( sheet.get_Range("A1", "J10"), 

    Microsoft.Office.Interop.Excel.XlChartType.xl3DColumn, 
        System.Reflection.Missing.Value, 
        Microsoft.Office.Interop.Excel.XlRowCol.xlRows, 
        System.Reflection.Missing.Value, 
        System.Reflection.Missing.Value, 
        System.Reflection.Missing.Value, 
        "Sales", 
        "Employee", 
        "Export in percent", 
        System.Reflection.Missing.Value );

使用以下命令将图表移动到工作表中

chart.Location(
  Microsoft.Office.Interop.Excel.XlChartLocation.xlLocationAsObject, 
              sheet.get_Name() );

要在工作表中移动图表,请执行

    sheet.get_Shapes().Item("Chart 1").set_Left( 2.10f );
    sheet.get_Shapes().Item("Chart 1").set_Top( 150.0f );

使用以下命令调整图表大小

    sheet.get_Shapes().Item("Chart 1").set_Width( 500.0f );
    sheet.get_Shapes().Item("Chart 1").set_Height( 300.0f );

一个有趣的方法是 CopyPicture()。此方法允许您复制工作表中的任何内容并将其存储在剪贴板上,例如,作为位图。此位图可以复制到任何 J# 项目中进行进一步处理和转换。

    sheet.get_Shapes().Item("Chart 1").CopyPicture(
        Microsoft.Office.Interop.Excel.XlPictureAppearance.xlScreen,
        Microsoft.Office.Interop.Excel.XlCopyPictureFormat.xlBitmap );

如果您将 PictureBox 控件添加到应用程序中,您可以使用以下代码将图表粘贴到 J# 应用程序中

    System.Drawing.Bitmap bitmap =  new System.Drawing.Bitmap( 
        (System.Drawing.Image)Clipboard.GetDataObject().GetData(
        System.Windows.Forms.DataFormats.Bitmap ));
    this.pictureBox1.set_Image( bitmap );

参考文献

© . All rights reserved.