Как создавать сценарии для файлов Excel с помощью Groovy - PullRequest
4 голосов
/ 09 ноября 2011

Я хочу создать файлы Excel в Groovy, а затем подготовить их. Этот код был взят из примера с использованием языка сценариев оболочки Microsoft:

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Add()
Set objWorksheet = objWorkbook.Worksheets(1)

objWorksheet.Cells(1,1) = "Operating System"
objWorksheet.Cells(2,1) = "Windows Server 2003"
objWorksheet.Cells(3,1) = "Windows XP"
objWorksheet.Cells(5,1) = "Windows NT 4.0"
objWorksheet.Cells(6,1) = "Other"

objWorksheet.Cells(1,2) = "Number of Computers"
objWorksheet.Cells(2,2) = 145
objWorksheet.Cells(3,2) = 987
objWorksheet.Cells(4,2) = 611
objWorksheet.Cells(5,2) = 41
objWorksheet.Cells(6,2) = 56

Set objRange = objWorksheet.UsedRange
objRange.Select

Set colCharts = objExcel.Charts
colCharts.Add()

Set objChart = colCharts(1)
objChart.Activate

objChart.HasLegend = FALSE
objChart.ChartTitle.Text = "Operating System Use"

Как бы я изменил это для работы в Groovy?

Ответы [ 5 ]

14 голосов
/ 09 ноября 2011

Вам нужно работать с COM . Внизу этой страницы приведен пример автоматизации Excel.

редактирует

Вот ваш пример, переведенный на Groovy (я запускал его под Groovy 1.8.2):

import org.codehaus.groovy.scriptom.*
import org.codehaus.groovy.scriptom.tlb.office.excel.XlChartType
import org.codehaus.groovy.scriptom.tlb.office.excel.XlRowCol
import org.codehaus.groovy.scriptom.tlb.office.excel.XlChartLocation

// create a xls instance
def xls = new ActiveXObject("Excel.Application")

xls.Visible = true

Thread.sleep(1000)

// get the workbooks object
def workbooks = xls.Workbooks
// add a new workbook
def workbook  = workbooks.Add()

// select the active sheet
def sheet = workbook.ActiveSheet

cell = sheet.Range("A1")
cell.Value = "Operating System"
cell = sheet.Range("A2")
cell.Value = "Windows Server 2003"
cell = sheet.Range("A3")
cell.Value = "Windows XP"
cell = sheet.Range("A4")
cell.Value = "Windows NT 4.0"
cell = sheet.Range("A5")
cell.Value = "Other"

cell = sheet.Range("B1")
cell.Value = "Number of Computers"
cell = sheet.Range("B2")
cell.Value = 145
cell = sheet.Range("B3")
cell.Value = 987
cell = sheet.Range("B4")
cell.Value = 611
cell = sheet.Range("B5")
cell.Value = 41

def chart = workbook.Charts.Add(Scriptom.MISSING, sheet)  // create chart object
chart.ChartType = XlChartType.xl3DArea // set type to pie
chart.SetSourceData(sheet.Range("A1:B5"), XlRowCol.xlColumns) // set source data
chart.Location(XlChartLocation.xlLocationAsNewSheet) // add chart as new sheet
2 голосов
/ 08 декабря 2013

Ответ Марка выше был отличным примером.За этим событием легче следить, если вы внесете пару простых изменений:

import org.codehaus.groovy.scriptom.*
import org.codehaus.groovy.scriptom.tlb.office.excel.*

def xls = new ActiveXObject("Excel.Application")

xls.Visible = true

Thread.sleep(1000)

// add a new workbook
def workbook  = xls.Workbooks.Add()

// select the active sheet
def sheet = workbook.ActiveSheet    

sheet.Range("A1").Value = "Operating System"
sheet.Range("A2").Value = "Windows Server 2003"
sheet.Range("A3").Value = "Windows XP"
sheet.Range("A4").Value = "Windows NT 4.0"
sheet.Range("A5").Value = "Other"

sheet.Range("B1").Value = "Number of Computers"
sheet.Range("B2").Value = 145
sheet.Range("B3").Value = 987
sheet.Range("B4").Value = 611
sheet.Range("B5").Value = 41

def chart = workbook.Charts.Add(Scriptom.MISSING, sheet)  // create chart object
chart.ChartType = XlChartType.xl3DArea // set type to pie
chart.SetSourceData(sheet.Range("A1:B5"), XlRowCol.xlColumns) // set source data
chart.Location(XlChartLocation.xlLocationAsNewSheet) // add chart as new sheet
0 голосов
/ 19 августа 2015

Вероятно, самый простой (с точки зрения внешнего кода) текстовый формат, ячейки разделены символом '\ t' и строками "\ r \ n".Будьте осторожны с ячейкой, имеющей значение String, но с num символами (или с одинаковыми датами), лучше всего начинать с одиночного апострофа

Такой формат можно вставить в буфер обмена или открыть из меню файла.

0 голосов
/ 20 декабря 2013

Я бы тоже пошел за Apache POI .Рабочий пример можно найти в руководстве разработчика .Существует также GSheets , тонкая классная оболочка для Apache POI, см. сообщение в блоге и модульный тест для примера использования.

0 голосов
/ 09 ноября 2011

Другой вариант может быть Apache POI , в зависимости от того, что вам нужно на самом деле реализовать.

Любой вариант будет сложным для начинающего; легкий путь - использовать оболочку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...