2011-11-08 65 views
3

我想在Groovy中创建excel文件,然后绘制它们。此代码取自使用Microsoft Shell脚本语言的示例:如何使用Groovy编写Excel文件

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中工作?

+0

正如蒂姆指出的,POI不支持图表,所以没关系。 –

回答

12

您需要groovy才能使用COM。朝这个page的底部是自动化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 
+0

谢谢。对初学者来说这看起来很复杂!关于从哪里开始的任何建议? – blaughli

+0

@布莱克,它不是太复杂。我将上面的示例代码翻译成了Groovy。它映射非常直接。 – Mark

+0

这很完美,非常感谢。对此进行逆向工程有助于我理解Groovy以及一般编码。您链接的页面上的示例似乎不完整。他们使用'ActiveXProxy',而不是'ActiveXObject',这是我没有得到的。这很棒。我会给你买咖啡,如果你想添加更多的评论来描述每个代码块(特别是最后一个'cell.Value'的定义)发生了什么, – blaughli

0

另一种选择可以Apache POI,这取决于你需要实际执行。

任何一个选项对初学者来说都会很复杂;简单的路径是使用shell。

+0

你是什么意思“使用shell”?哦,你的意思是MS shell? – blaughli

+0

@blaughli是的COM如果你在Windows系统上,这个方法可能比POI更容易。 –

+0

不确定你可以使用poi去做图表...... –

0

马克在上面的回答是一个很好的例子。如果你做几个简单的改变,它的事件更容易遵循:

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

可能最简单的(就外部代码而言)是文本格式,单元格由'\ t'和行“\ r \ n”分隔。 小心有意义字符串,但与数字字符(或类似日期)的细胞,最好预先用单撇号

这种格式可以粘贴剪贴板或从文件菜单打开。