save method

save(stream)

Saves the data of the embedded object into the specified stream.

def save(self, stream: io.BytesIO):
    ...
ParameterTypeDescription
streamio.BytesIOWhere to save the object data.

Remarks

It is the responsibility of the caller to dispose the stream.

Exceptions

exceptioncondition
RuntimeError (Proxy error(InvalidOperationException))Throws if you attempt to save a linked object.

save(file_name)

Saves the data of the embedded object into a file with the specified name.

def save(self, file_name: str):
    ...
ParameterTypeDescription
file_namestrName of the file to save the OLE object data.

Exceptions

exceptioncondition
RuntimeError (Proxy error(InvalidOperationException))Throws if you attempt to save a linked object.

Examples

Shows how to extract embedded OLE objects into files.

doc = aw.Document(MY_DIR + "OLE spreadsheet.docm")
shape = doc.get_child(aw.NodeType.SHAPE, 0, True).as_shape()

# The OLE object in the first shape is a Microsoft Excel spreadsheet.
ole_format = shape.ole_format

self.assertEqual("Excel.Sheet.12", ole_format.prog_id)

# Our object is neither auto updating nor locked from updates.
self.assertFalse(ole_format.auto_update)
self.assertEqual(False, ole_format.is_locked)

# If we plan on saving the OLE object to a file in the local file system,
# we can use the "suggested_extension" property to determine which file extension to apply to the file.
self.assertEqual(".xlsx", ole_format.suggested_extension)

# Below are two ways of saving an OLE object to a file in the local file system.
# 1 -  Save it via a stream:
with open(ARTIFACTS_DIR + "OLE spreadsheet extracted via stream" + ole_format.suggested_extension, "wb") as file:
    ole_format.save(file)

# 2 -  Save it directly to a filename:
ole_format.save(ARTIFACTS_DIR + "OLE spreadsheet saved directly" + ole_format.suggested_extension)

See Also