test_xlsxwriter.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import contextlib
  2. import pytest
  3. from pandas import DataFrame
  4. import pandas._testing as tm
  5. from pandas.io.excel import ExcelWriter
  6. xlsxwriter = pytest.importorskip("xlsxwriter")
  7. pytestmark = pytest.mark.parametrize("ext", [".xlsx"])
  8. def test_column_format(ext):
  9. # Test that column formats are applied to cells. Test for issue #9167.
  10. # Applicable to xlsxwriter only.
  11. openpyxl = pytest.importorskip("openpyxl")
  12. with tm.ensure_clean(ext) as path:
  13. frame = DataFrame({"A": [123456, 123456], "B": [123456, 123456]})
  14. with ExcelWriter(path) as writer:
  15. frame.to_excel(writer)
  16. # Add a number format to col B and ensure it is applied to cells.
  17. num_format = "#,##0"
  18. write_workbook = writer.book
  19. write_worksheet = write_workbook.worksheets()[0]
  20. col_format = write_workbook.add_format({"num_format": num_format})
  21. write_worksheet.set_column("B:B", None, col_format)
  22. with contextlib.closing(openpyxl.load_workbook(path)) as read_workbook:
  23. try:
  24. read_worksheet = read_workbook["Sheet1"]
  25. except TypeError:
  26. # compat
  27. read_worksheet = read_workbook.get_sheet_by_name(name="Sheet1")
  28. # Get the number format from the cell.
  29. try:
  30. cell = read_worksheet["B2"]
  31. except TypeError:
  32. # compat
  33. cell = read_worksheet.cell("B2")
  34. try:
  35. read_num_format = cell.number_format
  36. except AttributeError:
  37. read_num_format = cell.style.number_format._format_code
  38. assert read_num_format == num_format
  39. def test_write_append_mode_raises(ext):
  40. msg = "Append mode is not supported with xlsxwriter!"
  41. with tm.ensure_clean(ext) as f:
  42. with pytest.raises(ValueError, match=msg):
  43. ExcelWriter(f, engine="xlsxwriter", mode="a")
  44. @pytest.mark.parametrize("nan_inf_to_errors", [True, False])
  45. def test_engine_kwargs(ext, nan_inf_to_errors):
  46. # GH 42286
  47. engine_kwargs = {"options": {"nan_inf_to_errors": nan_inf_to_errors}}
  48. with tm.ensure_clean(ext) as f:
  49. with ExcelWriter(f, engine="xlsxwriter", engine_kwargs=engine_kwargs) as writer:
  50. assert writer.book.nan_inf_to_errors == nan_inf_to_errors
  51. def test_book_and_sheets_consistent(ext):
  52. # GH#45687 - Ensure sheets is updated if user modifies book
  53. with tm.ensure_clean(ext) as f:
  54. with ExcelWriter(f, engine="xlsxwriter") as writer:
  55. assert writer.sheets == {}
  56. sheet = writer.book.add_worksheet("test_name")
  57. assert writer.sheets == {"test_name": sheet}