【问题标题】:RubyXL - Copying cells between the sheetsRubyXL - 在工作表之间复制单元格
【发布时间】:2015-10-14 10:55:01
【问题描述】:

如何从一个工作表(或工作表)复制具有所有样式(不仅是值)的单元格并粘贴到另一个? 感谢您的回答。

【问题讨论】:

  • 感觉好像有一首同名的r&b歌曲,却又说不出口……

标签: ruby rubyxl


【解决方案1】:

无法帮助您使用 RubyXL,但这里有一个经过测试的 sript 可以做到这一点。 不过你需要在 Windows 上。

require 'win32ole'

xl=WIN32OLE::new('Excel.Application')
xl.Visible=0 #hide excel, 1 = show

xl.Workbooks.Open('c:\\temp\\Map1.xlsx') #will open a file
sheet = xl.sheets(1)
sheet.activate #activate the sheet you want
xlPasteValues = -4163 #(&HFFFFEFBD)
xlPasteSpecialOperationNone = -4142 #(&HFFFFEFD2)
xlPasteFormats = -4122 # Copied source format is pasted
xlPasteValuesAndNumberFormats = 12
sheet.Range("A1:A2").Copy
sheet.Range("B1:B2").PasteSpecial(xlPasteValuesAndNumberFormats)
sheet.Range("B1:B2").PasteSpecial(xlPasteFormats)
xl.ActiveWorkbook.Save
xl.ActiveWorkbook.Close()
xl.Quit

【讨论】:

    【解决方案2】:

    因为我经常使用 RubyXL,所以花时间把它吐出来。 似乎有一个更好的 gem axlsx 可以处理电子表格,更合乎逻辑,你可以做更多的事情。这是设置和复制样式的简单示例。我保留我的另一个答案以供参考,因为它有效但有明显的缺点。

    require 'axlsx'
    
    p = Axlsx::Package.new
    wb = p.workbook
    
    wb.add_worksheet(:name => "Basic Worksheet") do |sheet|
      sheet.add_row ["First Column", "Second", "Third"]
      sheet.add_row [1, 2, 3]
      sheet.add_row ['     preserving whitespace']
      thin_border = Axlsx::STYLE_THIN_BORDER
      sheet['A1:A1'].first.style = thin_border
      sheet['A1:C1'].each{|cell|cell.style = sheet['A1'].style}
    end
    
    p.serialize('./simple.xlsx')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多