| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- from datetime import (
- date,
- datetime,
- )
- import re
- import pytest
- from pandas.compat import is_platform_windows
- import pandas as pd
- import pandas._testing as tm
- from pandas.io.excel import ExcelWriter
- odf = pytest.importorskip("odf")
- if is_platform_windows():
- pytestmark = pytest.mark.single_cpu
- @pytest.fixture
- def ext():
- return ".ods"
- def test_write_append_mode_raises(ext):
- msg = "Append mode is not supported with odf!"
- with tm.ensure_clean(ext) as f:
- with pytest.raises(ValueError, match=msg):
- ExcelWriter(f, engine="odf", mode="a")
- @pytest.mark.parametrize("engine_kwargs", [None, {"kwarg": 1}])
- def test_engine_kwargs(ext, engine_kwargs):
- # GH 42286
- # GH 43445
- # test for error: OpenDocumentSpreadsheet does not accept any arguments
- with tm.ensure_clean(ext) as f:
- if engine_kwargs is not None:
- error = re.escape(
- "OpenDocumentSpreadsheet() got an unexpected keyword argument 'kwarg'"
- )
- with pytest.raises(
- TypeError,
- match=error,
- ):
- ExcelWriter(f, engine="odf", engine_kwargs=engine_kwargs)
- else:
- with ExcelWriter(f, engine="odf", engine_kwargs=engine_kwargs) as _:
- pass
- def test_book_and_sheets_consistent(ext):
- # GH#45687 - Ensure sheets is updated if user modifies book
- with tm.ensure_clean(ext) as f:
- with ExcelWriter(f) as writer:
- assert writer.sheets == {}
- table = odf.table.Table(name="test_name")
- writer.book.spreadsheet.addElement(table)
- assert writer.sheets == {"test_name": table}
- @pytest.mark.parametrize(
- ["value", "cell_value_type", "cell_value_attribute", "cell_value"],
- argvalues=[
- (True, "boolean", "boolean-value", "true"),
- ("test string", "string", "string-value", "test string"),
- (1, "float", "value", "1"),
- (1.5, "float", "value", "1.5"),
- (
- datetime(2010, 10, 10, 10, 10, 10),
- "date",
- "date-value",
- "2010-10-10T10:10:10",
- ),
- (date(2010, 10, 10), "date", "date-value", "2010-10-10"),
- ],
- )
- def test_cell_value_type(ext, value, cell_value_type, cell_value_attribute, cell_value):
- # GH#54994 ODS: cell attributes should follow specification
- # http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#refTable13
- from odf.namespaces import OFFICENS
- from odf.table import (
- TableCell,
- TableRow,
- )
- table_cell_name = TableCell().qname
- with tm.ensure_clean(ext) as f:
- pd.DataFrame([[value]]).to_excel(f, header=False, index=False)
- with pd.ExcelFile(f) as wb:
- sheet = wb._reader.get_sheet_by_index(0)
- sheet_rows = sheet.getElementsByType(TableRow)
- sheet_cells = [
- x
- for x in sheet_rows[0].childNodes
- if hasattr(x, "qname") and x.qname == table_cell_name
- ]
- cell = sheet_cells[0]
- assert cell.attributes.get((OFFICENS, "value-type")) == cell_value_type
- assert cell.attributes.get((OFFICENS, cell_value_attribute)) == cell_value
|