Я просмотрел прилагаемый пример 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
Доступ к таблицам, сохранение файлов Excel, Java, Java Com Bridge (Jacob jacob-1.16) ⇐ JAVA
Программисты JAVA общаются здесь
1734562820
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();
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/8791551/accessing-sheets-saving-excel-files-java-java-com-bridge-jacob-jacob-1-16[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия