用Ruby操作Excel中,怎么样合并竖单元格,用到的gem包是spreadsheet

Python018

用Ruby操作Excel中,怎么样合并竖单元格,用到的gem包是spreadsheet,第1张

ruby操作excel文件

使用ruby来操作excel文件首先需要在脚本里包含以下语句

require 'win32ole'

把win32ole包含进来后,就可以通过和windows下的excel api进行交互来对excel文件进行读写了.

Qt操作Excel,无论后缀是xls还是xlsx都可以。

1.如下,是下载的一个Excel VBA参考手册,内容不算太全!

2.Excel读取

为了便于测试,假设已存在一个excel文件,操作内容已经被红色标记出来。如下所示:

主要读取内容:

标题

工作表数目

工作表名称

起始行

起始列

行数

列数

单元格内容

代码如下:

QAxObject excel("Excel.Application")

excel.setProperty("Visible", true)

QAxObject *work_books = excel.querySubObject("WorkBooks")

work_books->dynamicCall("Open (const QString&)",  QString("E:/test.xlsx"))

QVariant title_value = excel.property("Caption") //获取标题

qDebug()<<QString("excel title : ")<<title_value

QAxObject *work_book = excel.querySubObject("ActiveWorkBook")

QAxObject *work_sheets = work_book->querySubObject("Sheets")  //Sheets也可换用WorkSheets

int sheet_count = work_sheets->property("Count").toInt()  //获取工作表数目

qDebug()<<QString("sheet count : ")<<sheet_count

for(int i=1i<=sheet_counti++)

{

QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", i)  //Sheets(int)也可换用Worksheets(int)

QString work_sheet_name = work_sheet->property("Name").toString()  //获取工作表名称

QString message = QString("sheet ")+QString::number(i, 10)+ QString("  name")

qDebug()<<message<<work_sheet_name

}

if(sheet_count >0)

{

QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", 1)

QAxObject *used_range = work_sheet->querySubObject("UsedRange")

QAxObject *rows = used_range->querySubObject("Rows")

QAxObject *columns = used_range->querySubObject("Columns")

int row_start = used_range->property("Row").toInt() //获取起始行

int column_start = used_range->property("Column").toInt()  //获取起始列

int row_count = rows->property("Count").toInt() //获取行数

int column_count = columns->property("Count").toInt()  //获取列数

for(int i=row_starti

{

for(int j=column_startj

{

QAxObject *cell = work_sheet->querySubObject("Cells(int,int)", i, j)

QVariant cell_value = cell->property("Value") //获取单元格内容

QString message = QString("row-")+QString::number(i,  10)+QString("-column-")+QString::number(j, 10)+QString(":")

qDebug()<<message<<cell_value

}

}

}

3.效果如下:

4.Excel增、删、改

主要操作:

设置标题

插入工作表(至最后一行)

设置工作表名称

删除工作表

设置单元格内容

设置单元格字体(类型、大小、加粗、斜体、下划线、颜色等)

设置单元格对齐方式

设置单元格高度、宽度

设置单元格背景色、边框色

合并/拆分单元格

清空单元格

代码如下:

QAxObject excel("Excel.Application")

excel.setProperty("Visible", true)

QAxObject *work_books = excel.querySubObject("WorkBooks")

work_books->dynamicCall("Open(const QString&)",  "E:\\test.xlsx")

excel.setProperty("Caption", "Qt Excel")

QAxObject *work_book = excel.querySubObject("ActiveWorkBook")

QAxObject *work_sheets = work_book->querySubObject("Sheets")  //Sheets也可换用WorkSheets

//删除工作表(删除第一个)

QAxObject *first_sheet = work_sheets->querySubObject("Item(int)",  1)

first_sheet->dynamicCall("delete")

//插入工作表(插入至最后一行)

int sheet_count = work_sheets->property("Count").toInt()  //获取工作表数目

QAxObject *last_sheet = work_sheets->querySubObject("Item(int)",  sheet_count)

QAxObject *work_sheet = work_sheets->querySubObject("Add(QVariant)",  last_sheet->asVariant())

last_sheet->dynamicCall("Move(QVariant)",  work_sheet->asVariant())

work_sheet->setProperty("Name", "Qt Sheet") //设置工作表名称

//操作单元格(第2行第2列)

QAxObject *cell = work_sheet->querySubObject("Cells(int,int)", 2,  2)

cell->setProperty("Value", "Java C++ C# PHP Perl Python Delphi Ruby")  //设置单元格值

cell->setProperty("RowHeight", 50) //设置单元格行高

cell->setProperty("ColumnWidth", 30) //设置单元格列宽

cell->setProperty("HorizontalAlignment", -4108)//左对齐(xlLeft):-4131   居中(xlCenter):-4108  右对齐(xlRight):-4152

cell->setProperty("VerticalAlignment", -4108) //上对齐(xlTop)-4160  居中(xlCenter):-4108  下对齐(xlBottom):-4107

cell->setProperty("WrapText", true) //内容过多,自动换行

//cell->dynamicCall("ClearContents()") //清空单元格内容

QAxObject* interior = cell->querySubObject("Interior")

interior->setProperty("Color", QColor(0, 255, 0))   //设置单元格背景色(绿色)

QAxObject* border = cell->querySubObject("Borders")

border->setProperty("Color", QColor(0, 0, 255))   //设置单元格边框色(蓝色)

QAxObject *font = cell->querySubObject("Font") //获取单元格字体

font->setProperty("Name", QStringLiteral("华文彩云")) //设置单元格字体

font->setProperty("Bold", true) //设置单元格字体加粗

font->setProperty("Size", 20) //设置单元格字体大小

font->setProperty("Italic", true) //设置单元格字体斜体

font->setProperty("Underline", 2) //设置单元格下划线

font->setProperty("Color", QColor(255, 0, 0))  //设置单元格字体颜色(红色)

//设置单元格内容,并合并单元格(第5行第3列-第8行第5列)

QAxObject *cell_5_6 = work_sheet->querySubObject("Cells(int,int)", 5,  3)

cell_5_6->setProperty("Value", "Java") //设置单元格值

QAxObject *cell_8_5 = work_sheet->querySubObject("Cells(int,int)", 8,  5)

cell_8_5->setProperty("Value", "C++")

QString merge_cell

merge_cell.append(QChar(3 - 1 + 'A')) //初始列

merge_cell.append(QString::number(5)) //初始行

merge_cell.append(":")

merge_cell.append(QChar(5 - 1 + 'A')) //终止列

merge_cell.append(QString::number(8)) //终止行

QAxObject *merge_range = work_sheet->querySubObject("Range(const  QString&)", merge_cell)

merge_range->setProperty("HorizontalAlignment", -4108)

merge_range->setProperty("VerticalAlignment", -4108)

merge_range->setProperty("WrapText", true)

merge_range->setProperty("MergeCells", true) //合并单元格

//merge_range->setProperty("MergeCells", false) //拆分单元格

//work_book->dynamicCall("Save()")  //保存文件(为了对比test与下面的test2文件,这里不做保存操作)  work_book->dynamicCall("SaveAs(const QString&)", "E:\\test2.xlsx")  //另存为另一个文件

work_book->dynamicCall("Close(Boolean)", false) //关闭文件

excel.dynamicCall("Quit(void)") //退出

5.效果如下:

操作前:

操作后: