В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

Автоматизация процесса создания и форматирования книг Excel с помощью Visual J++

Поддержка Office 2003 завершена

8 апреля 2014 г. корпорация Майкрософт прекратила поддержку Office 2003. Это повлияло на обновления программного обеспечения и параметры безопасности. Узнайте, что это значит для вас и какие меры по безопасности можно предпринять.

Аннотация
В статье рассмотрены вопросы автоматизации приложения Excel 97 и более поздних версий с помощью клиентского приложения в среде разработки Visual J++ на языке программирования Java. При разработке проекта использованы методы объектно-ориентированного программирования и библиотека типов Excel.
Дополнительная информация
Данная статья является аналогом статьи Microsoft Knowledge Base, посвященной созданию подобного проекта с помощью Visual C++ и библиотеки классов MFC. За дополнительной информацией об автоматизации Excel с помощью Visual C++ обратитесь к следующей статье Microsoft Knowledge Base:
179706 HOWTO: Use MFC to Automate Excel and Create/Format a New Workbook
  1. Запустите Visual J++ 6.0. Создайте консольное приложение и дайте ему имя XLJava1.
  2. В окне Project Explorer раскройте дерево созданного проекта и два раза щелкните файл Class1.java.
  3. В меню Project выберите пункт Add COM Wrapper, укажите библиотеку объектов Microsoft Excel 8.0, 9.0, or 10.0 (as appropriate) Object Library и нажмите кнопку OK. Это необходимо для добавления в проект объектов Java COM Wrapper, порождаемых из библиотеки типов Excel.
  4. В начало файла Class1.Java скопируйте следующие инструкции импорта.
       import Excel8.*; // Change the 8 to 9 for Excel 2000, or 10 for 2002 or later   // For Excel 2000 the statement should read   // import Excel9.*; // Excel support   import com.ms.com.*; // Variant & exception support.    import java.lang.InterruptedException; // Needed for Thread.sleep().   (These are illustrated in the code sample below.)					
  5. В точку входа Class1 и в функцию main() скопируйте следующий программный код.
         /** * This class can take a variable number of parameters on the command * line. Program execution begins with the main() method. The class * constructor is not invoked unless an object of type 'Class1' * created in the main() method. */ import excel.*; // for Excel 2002, or - import excel9.*; for Excel 2000 or later                  // or - import excel8.*; for Excel 97import java.lang.InterruptedException; // needed for thread.sleepimport com.ms.com.*; // Variant & exception support<BR/>public class Class1{	/**	 * The main entry point for the application. 	 *	 * @param args Array of parameters passed to the application	 * via the command line.	 */ 	//==============================================================	// Add the following static member function declaration     // just before main()...    // J/Direct declarations... to use Windows MessageBox    /** @dll.import("USER32") */     private static native int MessageBox(int hwndOwner, String text,                                          String title, int fuStyle);    // Here is an example of its use.    // MessageBox(0, "Hello, World", "Title", 0); //fuStyle switch    //    values are defined in Winuser.h. Search on 'MB_OK'    //==============================================================	public static void main (String[] args)	{		// Force COM objects to be created on the current thread.      // Otherwise, older VMs might not release all references      // and Excel might continue to run after you shutdown.      ComLib.declareMessagePumpThread();      // Launch Excel       Variant vEmpty = new Variant();      vEmpty.noParam();      Application xlApp = new Application();      //xlApp.setVisible(0,true); // Excel 2000 & 97 1st param is LCID, Locale ID	  xlApp.setVisible(true); // One argument for Excel 2002 or later   	      // Get the workbook object via the object model.      Workbooks books = xlApp.getWorkbooks();      _Workbook book = books.Add(vEmpty,0);      // Get the first sheet.		      Sheets sheets = (Sheets)book.getSheets();      _Worksheet sheet = (_Worksheet)sheets.getItem(new Variant(1));      // Fill cells A1, B1, C1, and D1, one cell at a time, with "headers".      Range range = sheet.getRange(new Variant("A1"),new Variant("A1"));      //range.setValue(new Variant("First Name")); // Throughout, the SetValue      // of Excel 97 and Excel 2000 no longer works in Excel 2002 or later.	  range.setValue2(new Variant("First Name"));      range = sheet.getRange(new Variant("B1"),new Variant("B1"));      //range.setValue(new Variant("Last Name"));	  range.setValue2(new Variant("Last Name"));      range = sheet.getRange(new Variant("C1"),new Variant("C1"));      //range.setValue(new Variant("Full Name"));	  range.setValue2(new Variant("Full Name"));      range = sheet.getRange(new Variant("D1"),new Variant("D1"));      //range.setValue(new Variant("Salary"));	  range.setValue2(new Variant("Salary"));      // Format A1:D1 as bold, vertical alignment = center      range = sheet.getRange(new Variant("A1"),new Variant("D1"));      Font font = range.getFont();      font.setBold(new Variant(true));      range.setVerticalAlignment(new Variant(-4108));      // Fill range A2:B6 with first and last names,       range = sheet.getRange(new Variant("A2"),new Variant("A2"));      //range.setValue(new Variant("John"));	  range.setValue2(new Variant("John"));      range = sheet.getRange(new Variant("B2"),new Variant("B2"));      //range.setValue(new Variant("Smith"));	  range.setValue2(new Variant("Smith"));      range = sheet.getRange(new Variant("A3"),new Variant("A3"));      //range.setValue(new Variant("Tom"));	  range.setValue2(new Variant("Tom"));      range = sheet.getRange(new Variant("B3"),new Variant("B3"));      //range.setValue(new Variant("Brown"));	  range.setValue2(new Variant("Brown"));      range = sheet.getRange(new Variant("A4"),new Variant("A4"));      //range.setValue(new Variant("Sue"));	  range.setValue2(new Variant("Sue"));      range = sheet.getRange(new Variant("B4"),new Variant("B4"));      //range.setValue(new Variant("Thomas"));	  range.setValue2(new Variant("Thomas"));      range = sheet.getRange(new Variant("A5"),new Variant("A5"));      //range.setValue(new Variant("Jane"));	  range.setValue2(new Variant("Jane"));      range = sheet.getRange(new Variant("B5"),new Variant("B5"));      //range.setValue(new Variant("Jones"));	  range.setValue2(new Variant("Jones"));      range = sheet.getRange(new Variant("A6"),new Variant("A6"));      //range.setValue(new Variant("Adam"));	  range.setValue2(new Variant("Adam"));      range = sheet.getRange(new Variant("B6"),new Variant("B6"));      //range.setValue(new Variant("Johnson"));	  range.setValue2(new Variant("Johnson"));      // Fill range C2:C6 with a relative formula(=A2 & " " & B2")      range = sheet.getRange(new Variant("C2"),new Variant("C6"));      range.setFormula(new Variant("=A2 & \" \" & B2"));      // Fill D2:D6 with a formula (=RAND()*100000) and apply a       //  number format      range = sheet.getRange(new Variant("D2"),new Variant("D6"));      range.setFormula(new Variant("=RAND()*100000"));      range.setNumberFormat(new Variant("$0.00"));      // AutoFit columns A:D      range = sheet.getRange(new Variant("A1"),new Variant("D1"));      Range columns = range.getEntireColumn();      columns.AutoFit();      // Manipulate a variable number of columns      //  for Quarterly Sales Data      short NumQtrs;      String msg;      String msg2;      msg2 = " "; // Initialize it to avoid compile error      int reply;      Range resizedrange;      Interior interior;      Borders borders;      // Determine how many quarters to display data for.      for(NumQtrs = 1; NumQtrs<=4; NumQtrs++)      {         if (NumQtrs == 1)         {          msg = "Enter sales data for " + NumQtrs + " quarter?";          msg2 = "Displaying data for " + NumQtrs + " quarter";         }         else         {          msg = "Enter sales data for " + NumQtrs + " quarters?";          msg2 = "Displaying data for " + NumQtrs + " quarters";         }         reply = MessageBox(0, msg, "Indicate Quarters", 36);         if(6 == reply) break;			      } // end For loop   		      MessageBox(0, msg2, "Data Setting", 0);      if(5 == NumQtrs) // Limit display to <=4 quarters      {       NumQtrs = 4;      }      // Starting at E1, fill headers for number of columns selected.      range = sheet.getRange(new Variant("E1"),new Variant("E1"));      resizedrange = range.getResize(vEmpty, new Variant(NumQtrs));      resizedrange.setFormula(         new Variant("= \"Q\" & COLUMN()-4 & CHAR(10)& \"Sales\""));      // Change the Orientation and Wrap Text properties for the headers.      resizedrange.setOrientation(new Variant(38));      resizedrange.setWrapText(new Variant(true));      // Fill the interior colors of the headers.      interior = resizedrange.getInterior();      interior.setColorIndex(new Variant(36));      // Fill the columns with a formula and apply a number format.      range = sheet.getRange(new Variant("E2"),new Variant("E6"));      resizedrange = range.getResize(vEmpty, new Variant(NumQtrs));      resizedrange.setFormula(new Variant("=RAND()*100"));      resizedrange.setNumberFormat(new Variant("$0.00"));      // Apply Borders to the Sales data and headers      range = sheet.getRange(new Variant("E1"), new Variant("E6"));      resizedrange = range.getResize(vEmpty, new Variant(NumQtrs));      borders = resizedrange.getBorders();      borders.setWeight(new Variant(2)); // xlThin = 2      // Add Totals formula for Quarterly sales data, apply a border.      range = sheet.getRange(new Variant("E8"),new Variant("E8"));      resizedrange = range.getResize(vEmpty, new Variant(NumQtrs));      resizedrange.setFormula(new Variant("=SUM(E2:E6)"));      borders = resizedrange.getBorders();      Border bottomborder;      bottomborder = borders.getItem(9); // Bottom border      bottomborder.setLineStyle(new Variant(-4119)); // xlDouble = -4119      bottomborder.setWeight(new Variant(4));  // xlThick = 4      // Some more features: Add comment to cell C3 - Full       //    name of Tom Brown      range = sheet.getRange(new Variant("C3"),new Variant("C3"));      range.AddComment(new Variant("Tom was last month's top performer"));      // Chart the Salaries.      double Left = 72.; // location in points      double Top = 144.;      double Width = 350.;      double Height = 250.;      ChartObjects chartobjects =         (ChartObjects)sheet.ChartObjects(vEmpty,0); // explicit typecast      ChartObject chartobject = chartobjects.Add(Left, Top, Width, Height);      // Set the location and size.      Chart chart = chartobject.getChart();      range = sheet.getRange(new Variant("C2"), new Variant("D6"));      // Full name and salary.      range.Select();      chart.ChartWizard(new Variant(range), // Source                        new Variant(11),    // Gallery                        vEmpty,             // Format                        new Variant(1),     // PlotBy                        new Variant(0),     // CategoryLabels                        new Variant(1),     // SeriesLabels                        new Variant(true),  // HasLegend                        new Variant("Salary by Employee"), //Title                        new Variant("Employee"), //CategoryTitle                        new Variant("Salary"), //ValueTitle                        vEmpty,             // ExtraTitle                        0                   // LCID(localeID)                        );   		      // Make the application visible and give the user control of       // Microsoft Excel.      // xlApp.setVisible(0,true); // 1st param is LCID, Locale ID.       // The preceding was done at beginning of the program.      xlApp.setUserControl(true);   		      MessageBox(0, "When Excel hides, Minimize VJ++ IDE to see Excel",                 "Focus on Excel", 327744);      //book.setSaved(0,true); // Avoid "Save changes" dialog      //xlApp.Quit();  // Not if using UserControl			} // End of Main()} // End of Class					
  6. В меню Debug выберите команду Start. В результате программа будет создана, упакована и запущена. Когда программа будет запущена, на экране откроется окно консоли, а через некоторое время — приложение Excel. Поверх этих окон будет выведено диалоговое окно, в котором необходимо указать, для какого количества кварталов должна быть построена диаграммы. Если щелкнуть мышью в любой точке экрана, это окно будет свернуто и размещено на панели задач Windows. Если создается впечатление, что программа зависла, разверните его.
Ссылки
За дополнительной информацией о Visual J++ и реализации проектов автоматизации обратитесь к следующим статьям Microsoft Knowledge Base:
169173 INFO: Frequently Asked Questions for Visual J++
169796 HOWTO: Automate Excel from Java
215484 HOWTO: Automate PowerPoint Using Visual J++
179706 HOWTO: Use MFC to Automate Excel and Create/Format a New Workbook
219151 Как автоматизировать программу Microsoft Excel в среде разработки Visual Basic
jactivex Java Automation
Свойства

Номер статьи: 219430 — последний просмотр: 01/16/2004 14:24:00 — редакция: 4.0

  • Microsoft Visual J++ 6.0 Standard Edition
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Office XP Developer Edition
  • Microsoft Office 2000 Developer Edition
  • kbhowto kbautomation KB219430
Отзывы и предложения