2011-11-08 63 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」分隔。 小心有意義字符串,但與數字字符(或類似日期)的細胞,最好預先用單撇號

這種格式可以粘貼剪貼板或從文件菜單打開。