gpt4 book ai didi

ruby - 使用 ruby​​xl 创建使用相同模板的多个工作表

转载 作者:行者123 更新时间:2023-12-01 05:50:05 25 4
gpt4 key购买 nike

我有一个只有一张工作表 (Sheet1) 的 Excel 模板。是否可以使用 ruby​​xl 生成多张工作表,在我的输出文件中使用 Sheet1 作为模板?

最佳答案

我能够通过以下步骤实现这一目标:

1。解析 xlsx/xlsm 文件

workbook = RubyXL::Parser.parse(File.join(Rails.root, "public", "template.xlsm")

2。获取工作表模板

template = workbook[0]

3。向工作簿添加新工作表

worksheet = workbook.add_worksheet("Example")

4。重复的 sheet_data

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

不幸的是 Marshal.dump 返回错误 no _dump_data is defined for class Nokogiri::XML::Namespace for sheet_data's cells,所以我不得不写这个肮脏的解决方法。

5.复制你需要的一切

worksheet.cols = Marshal.load(Marshal.dump(template.cols))
worksheet.merged_cells = Marshal.load(Marshal.dump(template.merged_cells))

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

您也可以删除模板

workbook.worksheets.delete(template)

并返回带有新工作表的工作簿

send_data workbook.stream.string, filename: "example.xlsm", disposition: "attachment"

...在您的 Rails Controller 中

或者直接保存到文件

workbook.write("path/to/desired/Excel/file.xlsx")

关于ruby - 使用 ruby​​xl 创建使用相同模板的多个工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29507841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com