Skip to content

Commit 295a401

Browse files
committed
✨ add a wrapper for xlsx book and sheet. #56
1 parent 7e5df5f commit 295a401

File tree

4 files changed

+88
-2
lines changed

4 files changed

+88
-2
lines changed

changelog.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
name: pyexcel-xlsx
22
organisation: pyexcel
33
releases:
4+
- changes:
5+
- action: Updated
6+
details:
7+
- '`#56`: to add a csv file as sheet to a xlsx file'
8+
date: 10.05.2025
9+
version: 0.7.0
410
- changes:
511
- action: Updated
612
details:

pyexcel-xlsx.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ overrides: "pyexcel.yaml"
22
name: "pyexcel-xlsx"
33
project: "pyexcel-xlsx"
44
nick_name: xlsx
5-
version: 0.6.1
6-
current_version: 0.6.1
5+
version: 0.7.0
6+
current_version: 0.7.0
77
release: 0.6.1
88
file_type: xlsx
99
gitignore_language: Python

pyexcel_xlsx/book.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
"""
2+
pyexcel_xlsx.xlsxr
3+
~~~~~~~~~~~~~~~~~~~
4+
5+
Read xlsx file format using openpyxl
6+
7+
:copyright: (c) 2015-2025 by Onni Software Ltd & its contributors
8+
:license: New BSD License
9+
"""
10+
11+
import openpyxl
12+
13+
14+
class Sheet(object):
15+
def __init__(self, xlsx_sheet):
16+
self.xlsx_sheet = xlsx_sheet
17+
18+
def __getitem__(self, cell):
19+
return self.xlsx_sheet[cell]
20+
21+
def __setitem__(self, cell, value):
22+
self.xlsx_sheet[cell] = value
23+
24+
def append(self, data):
25+
self.xlsx_sheet.append(data)
26+
27+
28+
class Book(object):
29+
def __init__(self, file_name):
30+
self.xlsx_book = openpyxl.load_workbook(
31+
filename=file_name,
32+
)
33+
34+
def save(self, file_name):
35+
self.xlsx_book.save(file_name)
36+
37+
def close(self):
38+
self.xlsx_book.close()
39+
40+
def __getitem__(self, key):
41+
if key not in self.xlsx_book.sheetnames:
42+
self.xlsx_book.create_sheet(key)
43+
return Sheet(self.xlsx_book[key])
44+
45+
def __delitem__(self, other):
46+
self.xlsx_book.remove(self.xlsx_book[other])

tests/test_book.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import os
2+
from datetime import time, datetime
3+
4+
from pyexcel_xlsx import get_data
5+
from pyexcel_xlsx.book import Book
6+
from pyexcel_io._compact import OrderedDict
7+
8+
from nose.tools import eq_
9+
10+
11+
def test_book():
12+
test_file = "book_test.xlsx"
13+
book = Book(os.path.join("tests", "fixtures", "date_field.xlsx"))
14+
sheet = book["Sheet2"]
15+
sheet["A1"] = "Test"
16+
book.save(test_file)
17+
book.close()
18+
19+
data = get_data(test_file)
20+
eq_(data["Sheet2"], [["Test"]])
21+
os.unlink(test_file)
22+
23+
24+
def test_create_new_sheet():
25+
test_file = "book_test.xlsx"
26+
book = Book(os.path.join("tests", "fixtures", "date_field.xlsx"))
27+
sheet = book["alien"]
28+
sheet["A1"] = "Test"
29+
book.save(test_file)
30+
book.close()
31+
32+
data = get_data(test_file)
33+
eq_(data["alien"], [["Test"]])
34+
os.unlink(test_file)

0 commit comments

Comments
 (0)