Доступ к таблицам, сохранение файлов Excel, Java, Java Com Bridge (Jacob jacob-1.16)JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Доступ к таблицам, сохранение файлов Excel, Java, Java Com Bridge (Jacob jacob-1.16)

Сообщение Anonymous »

Я просмотрел прилагаемый пример Excel последней версии Java Com Bridge (jacob-1.16) и был немного разочарован, поскольку он создает и работает с совершенно новым файлом Excel.

Я хотел бы иметь доступ к существующему файлу Excel из Java, в данном случае с именем «JACOBWithExcel.xls», но подойдет любой файл Excel.

Пример SourceForge для Excel работает нормально на моем компьютере, и когда я изменил его для доступа к существующему файлу Excel, я столкнулся со следующими проблемами:

1. Мне не удалось получить существующий лист в книге. , хотя я пытаюсь использовать
тот же способ, которым я получил книгу:

Dispatch sheet = Dispatch.get(workbook, "Worksheets").toDispatch();
Dispatch.call(sheet, "Select", new Object[]{"Sheet2"}).toDispatch();


Этот код создаст следующее исключение:
com.jacob.com.ComFailException: невозможно сопоставить имя с dispid: Worksheets

2.; Не удалось сохранить книгу:

// Save the open workbook as "C:\jacob-1.16-M1\Test1.xls" file:
Dispatch.call(workbook, "SaveAs", new Variant("C:\\jacob-1.16-M1\\Test1.xls"),new Variant("1"));


Этот код создаст следующее исключение:
com.jacob.com.ComFailException: невозможно сопоставить имя с dispid: SaveAs

3.; Я не знаю, как начать выполнять следующие простые, но очень распространенные операции Excel, включая синтаксис Java для моста Java COM:

(Здесь включен Excel VBA код, который я пытаюсь реализовать на Java)

Выбор одной ячейки:
Диапазон («A4»). Выбор

Копировать выделенный диапазон в буфер обмена:

Selection.Copy


Выберите диапазон из нескольких ячеек для копирования:

Range("D9:D17").Select


Вставить содержимое буфера обмена в выбранное:

ActiveSheet.Paste


Переименование листа:

Sheets("Sheet2").Select
Sheets("Sheet2").Name = "MySheet2"


Форматирование ячеек, пример текста:

Selection.NumberFormat = "@"


Удалить строки:

Rows(intI).Select
Selection.Delete Shift:=xlUp


И, возможно...

Сортировка выборки:

Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom


Найти последнюю ячейку на листе:

ActiveSheet.Cells(65536, 1).End(xlUp).Select
intLastCellRow = Selection.Row


Спасибо за помощь.

P.S.:

Полный код приложения:

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public class TestJACOBWithExcel {
public static void main(String[] args) {

String strInputDoc = "C:\\jacob-1.16-M1\\JACOBWithExcel.xls"; // file to be opened.

ComThread.InitSTA();

ActiveXComponent xl = new ActiveXComponent("Excel.Application"); // Instance of application object created.

try {
// Get Excel application object properties in 2 ways:
System.out.println("version=" + xl.getProperty("Version"));
System.out.println("version=" + Dispatch.get(xl, "Version"));

// Make Excel instance visible:
Dispatch.put(xl, "Visible", new Variant(true));

// Open XLS file, get the workbooks object required for access:
Dispatch workbook = xl.getProperty("Workbooks").toDispatch();
Dispatch.call(workbook, "Open", new Variant(strInputDoc),new Variant("1"));

Dispatch sheet = Dispatch.get(workbook, "Worksheets").toDispatch();
Dispatch.call(sheet, "Select", new Object[]{"Sheet2"}).toDispatch();

// put in a value in cell A22 and place a a formula in cell A23:
Dispatch a22 = Dispatch.invoke(sheet, "Range", Dispatch.Get, new Object[] { "A22" }, new int[1]).toDispatch();

Dispatch a23 = Dispatch.invoke(sheet, "Range", Dispatch.Get, new Object[] { "A23" }, new int[1]).toDispatch();

Dispatch.put(a22, "Value", "123.456");
Dispatch.put(a23, "Formula", "=A22*2");

// Get values from cells A1 and A2
System.out.println("a22 from excel:" + Dispatch.get(a22, "Value"));
System.out.println("a23 from excel:" + Dispatch.get(a23, "Value"));

// Save the open workbook as "C:\jacob-1.16-M1\Test1.xls" file:
Dispatch.call(workbook, "SaveAs", new Variant("C:\\jacob-1.16-M1\\Test1.xls"),new Variant("1"));

// Close the Excel workbook without saving:
Variant saveYesNo = new Variant(false);
Dispatch.call(workbook, "Close", saveYesNo);

} catch (Exception e) {
e.printStackTrace();
} finally {

// Quit Excel:
// xl.invoke("Quit", new Variant[] {});
ComThread.Release();
}

}
}


Подробнее здесь: https://stackoverflow.com/questions/879 ... jacob-1-16
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Доступ к листам, сохранение файлов Excel, Java, Java Com Bridge (Jacob Jacob-1.16)
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Доступ к листам, сохранение файлов Excel, Java, Java Com Bridge (Jacob Jacob-1.16)
    Anonymous » » в форуме JAVA
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Jacob com.jacob.com.comfailException: не удается составить имя, чтобы Dismid:
    Anonymous » » в форуме JAVA
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Jacob com.jacob.com.comfailException: не удается составить имя, чтобы Dismid:
    Anonymous » » в форуме JAVA
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Как использовать h5 (bridge.net fork) для компиляции C# в javascript для node.js без веб -файлов?
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»