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






4.96/5 (15投票s)
2004年11月14日
4分钟阅读

143687

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

引言
在本文中,我们将重点介绍如何通过 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 两次以实现按钮处理程序。
应用程序实例
最重要的类是 application、workbook、worksheet 和 range 类。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 填充到 A1 到 J1 中,请执行以下操作
        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 等)中的所有数字进行求和,并将结果存储在 A11(B11、C11 等)中,文本为粗体。
    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 );

