首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rubyxl创建使用相同模板的多个工作表

使用rubyxl创建使用相同模板的多个工作表
EN

Stack Overflow用户
提问于 2015-04-08 14:53:15
回答 2查看 1.3K关注 0票数 3

我有一个excel模板,它只有一个表( Sheet1 ).Is是否可以使用rubyxl生成多个表,其中使用Sheet1作为我的输出文件中的模板?

EN

回答 2

Stack Overflow用户

发布于 2019-02-16 19:00:25

通过以下步骤,我能够做到这一点:

1.解析xlsx/xlsm文件

代码语言:javascript
复制
workbook = RubyXL::Parser.parse(File.join(Rails.root, "public", "template.xlsm")

2.获取工作表模板

代码语言:javascript
复制
template = workbook[0]

3.向工作簿中添加新工作表

代码语言:javascript
复制
worksheet = workbook.add_worksheet("Example")

4.复制sheet_data

代码语言:javascript
复制
worksheet.sheet_data = template.sheet_data.dup
worksheet.sheet_data.rows = template.sheet_data.rows.map do |row|
  next unless row
  new_row = row.dup
  new_row.worksheet = worksheet
  new_row.cells = row.cells.map{ |cell| next unless cell; new_cell = cell.dup; new_cell.worksheet = worksheet; new_cell }
  new_row
end

不幸的是,对于sheet_data的单元格,Marshal.dump返回错误no _dump_data is defined for class Nokogiri::XML::Namespace,所以我不得不写这个肮脏的变通方法。

5.复制您需要的所有其他内容

代码语言:javascript
复制
worksheet.cols = Marshal.load(Marshal.dump(template.cols))
worksheet.merged_cells = Marshal.load(Marshal.dump(template.merged_cells))

有关更多属性,请检查template.instance_variables

您还可以移除模板

代码语言:javascript
复制
workbook.worksheets.delete(template)

并通过以下方式返回包含新工作表的工作簿

代码语言:javascript
复制
send_data workbook.stream.string, filename: "example.xlsm", disposition: "attachment"

...in你的Rails控制器

或者只是将其保存到文件

代码语言:javascript
复制
workbook.write("path/to/desired/Excel/file.xlsx")
票数 1
EN

Stack Overflow用户

发布于 2015-04-15 02:55:11

代码语言:javascript
复制
template = RubyXL::Parser.parse 'path/to/template.xlsx'
sheet1 = template.worksheets[0]
sheet2 = template.worksheets[0]
#your code manipulating sheet1, sheet2 etc.
return RubyXL::Workbook.new [sheet1, sheet2]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29507841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档