Source code for openpyxl.workbook.tests.test_workbook

from __future__ import absolute_import
# coding: utf-8
# Copyright (c) 2010-2017 openpyxl

# stdlib
import datetime

# package imports
from openpyxl.workbook import Workbook
from openpyxl.reader.excel import load_workbook
from openpyxl.workbook.defined_name import DefinedName
from openpyxl.utils.exceptions import ReadOnlyWorkbookException

from openpyxl.xml.constants import (
    XLSM,
    XLSX,
    XLTM,
    XLTX
)

# test imports
import pytest


[docs]class TestWorkbook: @pytest.mark.parametrize("has_vba, as_template, content_type", [ (None, False, XLSX), (None, True, XLTX), (True, False, XLSM), (True, True, XLTM) ] )
[docs] def test_template(self, has_vba, as_template, content_type): from openpyxl.workbook import Workbook wb = Workbook() wb.vba_archive = has_vba wb.template = as_template assert wb.mime_type == content_type
[docs] def test_named_styles(self): wb = Workbook() assert wb.named_styles == ['Normal']
[docs]def test_get_active_sheet(): wb = Workbook() assert wb.active == wb.worksheets[0]
[docs]def test_create_sheet(): wb = Workbook() new_sheet = wb.create_sheet() assert new_sheet == wb.worksheets[-1]
[docs]def test_create_sheet_with_name(): wb = Workbook() new_sheet = wb.create_sheet(title='LikeThisName') assert new_sheet == wb.worksheets[-1]
[docs]def test_add_correct_sheet(): wb = Workbook() new_sheet = wb.create_sheet() wb._add_sheet(new_sheet) assert new_sheet == wb.worksheets[2]
[docs]def test_add_sheetname(): wb = Workbook() with pytest.raises(TypeError): wb._add_sheet("Test")
[docs]def test_add_sheet_from_other_workbook(): wb1 = Workbook() wb2 = Workbook() ws = wb1.active with pytest.raises(ValueError): wb2._add_sheet(ws)
[docs]def test_create_sheet_readonly(): wb = Workbook() wb._read_only = True with pytest.raises(ReadOnlyWorkbookException): wb.create_sheet()
[docs]def test_remove_sheet(): wb = Workbook() new_sheet = wb.create_sheet(0) wb.remove(new_sheet) assert new_sheet not in wb.worksheets
[docs]def test_getitem(Workbook, Worksheet): wb = Workbook() ws = wb['Sheet'] assert isinstance(ws, Worksheet) with pytest.raises(KeyError): wb['NotThere']
[docs]def test_delitem(Workbook): wb = Workbook() del wb['Sheet'] assert wb.worksheets == []
[docs]def test_contains(Workbook): wb = Workbook() assert "Sheet" in wb assert "NotThere" not in wb
[docs]def test_iter(Workbook): wb = Workbook() for ws in wb: pass assert ws.title == "Sheet"
[docs]def test_index(): wb = Workbook() new_sheet = wb.create_sheet() sheet_index = wb.index(new_sheet) assert sheet_index == 1
[docs]def test_get_sheet_names(): wb = Workbook() names = ['Sheet', 'Sheet1', 'Sheet2', 'Sheet3', 'Sheet4', 'Sheet5'] for count in range(5): wb.create_sheet(0) assert wb.sheetnames == names
[docs]def test_get_named_ranges(): wb = Workbook() assert wb.get_named_ranges() == wb.defined_names.definedName
[docs]def test_add_named_range(): wb = Workbook() new_sheet = wb.create_sheet() named_range = DefinedName('test_nr') named_range.value = "Sheet!A1" wb.add_named_range(named_range) named_ranges_list = wb.get_named_ranges() assert named_range in named_ranges_list
[docs]def test_get_named_range(): wb = Workbook() new_sheet = wb.create_sheet() wb.create_named_range('test_nr', new_sheet, 'A1') assert wb.defined_names['test_nr'].value == 'Sheet1!A1'
[docs]def test_remove_named_range(): wb = Workbook() new_sheet = wb.create_sheet() wb.create_named_range('test_nr', new_sheet, 'A1') del wb.defined_names['test_nr'] named_ranges_list = wb.get_named_ranges() assert 'test_nr' not in named_ranges_list
[docs]def test_remove_sheet_with_names(): wb = Workbook() new_sheet = wb.create_sheet() wb.create_named_range('test_nr', new_sheet, 'A1', 1) del wb['Sheet1'] assert wb.defined_names.definedName == []
[docs]def test_add_invalid_worksheet_class_instance(): class AlternativeWorksheet(object): def __init__(self, parent_workbook, title=None): self.parent_workbook = parent_workbook if not title: title = 'AlternativeSheet' self.title = title wb = Workbook() ws = AlternativeWorksheet(parent_workbook=wb) with pytest.raises(TypeError): wb._add_sheet(worksheet=ws)
[docs]class TestCopy:
[docs] def test_worksheet_copy(self): wb = Workbook() ws1 = wb.active ws2 = wb.copy_worksheet(ws1) assert ws2 is not None
@pytest.mark.parametrize("title, copy", [ ("TestSheet", "TestSheet Copy"), (u"D\xfcsseldorf", u"D\xfcsseldorf Copy") ] )
[docs] def test_worksheet_copy_name(self, title, copy): wb = Workbook() ws1 = wb.active ws1.title = title ws2 = wb.copy_worksheet(ws1) assert ws2.title == copy
[docs] def test_cannot_copy_readonly(self): wb = Workbook() ws = wb.active wb._read_only = True with pytest.raises(ValueError): wb.copy_worksheet(ws)
[docs] def test_cannot_copy_writeonly(self): wb = Workbook(write_only=True) ws = wb.create_sheet() with pytest.raises(ValueError): wb.copy_worksheet(ws)