rubyXL icon indicating copy to clipboard operation
rubyXL copied to clipboard

Unable to parse Metadata Part

Open wagneramaral opened this issue 5 years ago • 7 comments

When I try to parse a xlsm file containing an instance of metadata part I receive the following message:

*** WARNING: storage class not found for metadata.xml (http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata)
WARNING: RubyXL::Workbook is not aware how to process RubyXL::GenericStorageObject

Reference to metadata part (page 81).

The simplest example that produce the error is the following:

def foo
    workbook = RubyXL::Parser.parse_buffer(Allocation.first.file.download)
    respond_with workbook.stream.read
end

It's not possible to open the exported file in Excel. I also tried the parse method using the file path, it results in the same warning message and the exported file is also not readable in Excel.

Am I doing something wrong, or is there any workaround I can apply to parse xlsm files with metadata part? Unfortunately I can't provide the file as it contains sensitive data from a third party.

Anyway, thank you for this amazing gem.

wagneramaral avatar Jun 02 '20 07:06 wagneramaral

Monkey patched.

module RubyXL
  class SheetMetadata < GenericStorageObject
    CONTENT_TYPE = 'application/vnd.ms-excel.sheetMetadata'
    REL_TYPE     = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata'
  end

  class Workbook
    define_relationship(RubyXL::SheetMetadata)
  end
end

seki avatar Mar 18 '21 00:03 seki

@seki Can you please attach a sample file with which you are experiencing this issue?

weshatheleopard avatar Mar 18 '21 12:03 weshatheleopard

Sorry, I can't show the sample file.

require 'rubyXL'

module RubyXL
  class SheetMetadata < GenericStorageObject
    CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml'
    REL_TYPE     = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata'
  end

  class Workbook
    define_relationship(RubyXL::SheetMetadata)
  end
end

def foo(src, dest)
  workbook = RubyXL::Parser.parse(src)
  workbook.write(dest)
end

foo(ARGV.shift, ARGV.shift)

seki avatar Mar 19 '21 14:03 seki

Sorry, I can't show the sample file.

require 'rubyXL'

module RubyXL
  class SheetMetadata < GenericStorageObject
    CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml'
    REL_TYPE     = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata'
  end

  class Workbook
    define_relationship(RubyXL::SheetMetadata)
  end
end

def foo(src, dest)
  workbook = RubyXL::Parser.parse(src)
  workbook.write(dest)
end

foo(ARGV.shift, ARGV.shift)

Try to parse another xlsx file, i have the same problem today and this resolve the issue

mewthu2 avatar Apr 18 '22 19:04 mewthu2

Here is my monkeypatch for - I suppose - a Google Sheets document that has been exported as an Excel file:

# Monkeypatch
module RubyXL
  class SheetMetadata < GenericStorageObject
    CONTENT_TYPE = 'application/vnd.ms-excel.sheetMetadata'
    REL_TYPE     = 'http://customschemas.google.com/relationships/workbookmetadata'
  end

  class Workbook
    define_relationship(RubyXL::SheetMetadata)
  end
end

HLFH avatar Oct 17 '23 11:10 HLFH

Can somebody give me a sample file that exhibits this behavior already?

weshatheleopard avatar Oct 17 '23 15:10 weshatheleopard

Can somebody give me a sample file that exhibits this behavior already?

Try this file: test.xlsx

khiav223577 avatar Oct 29 '23 09:10 khiav223577