Skip to content

Commit 81afdde

Browse files
authored
Merge pull request #2076 from markotoplak/define-sheet-table
Allow choosing sheets when constructing a Table
2 parents 1171fa9 + 6e6a23a commit 81afdde

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

Orange/data/table.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ def __new__(cls, *args, **kwargs):
195195
if args[0].startswith('https://') or args[0].startswith('http://'):
196196
return cls.from_url(args[0], **kwargs)
197197
else:
198-
return cls.from_file(args[0], **kwargs)
198+
return cls.from_file(args[0])
199199
elif isinstance(args[0], Table):
200200
return cls.from_table(args[0].domain, args[0])
201201
elif isinstance(args[0], Domain):
@@ -545,19 +545,22 @@ def save(self, filename):
545545
writer.write_file(filename, self)
546546

547547
@classmethod
548-
def from_file(cls, filename):
548+
def from_file(cls, filename, sheet=None):
549549
"""
550550
Read a data table from a file. The path can be absolute or relative.
551551
552552
:param filename: File name
553553
:type filename: str
554+
:param sheet: Sheet in a file (optional)
555+
:type sheet: str
554556
:return: a new data table
555557
:rtype: Orange.data.Table
556558
"""
557559
from Orange.data.io import FileFormat
558560

559561
absolute_filename = FileFormat.locate(filename, dataset_dirs)
560562
reader = FileFormat.get_reader(absolute_filename)
563+
reader.select_sheet(sheet)
561564
data = reader.read()
562565

563566
# Readers return plain table. Make sure to cast it to appropriate

Orange/tests/test_xlsx_reader.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import numpy as np
88

9-
from Orange.data import io, ContinuousVariable, DiscreteVariable
9+
from Orange.data import io, ContinuousVariable, DiscreteVariable, Table
1010

1111

1212
def get_dataset(name):
@@ -48,6 +48,12 @@ def test_named_sheet(self):
4848
self.assertEqual(len(table.domain.attributes), 4)
4949
self.assertEqual(table.name, 'header_0_sheet-my_sheet')
5050

51+
def test_named_sheet_table(self):
52+
table = Table.from_file(get_dataset("header_0_sheet.xlsx"),
53+
sheet="my_sheet")
54+
self.assertEqual(len(table.domain.attributes), 4)
55+
self.assertEqual(table.name, 'header_0_sheet-my_sheet')
56+
5157

5258
class TestExcelHeader1(unittest.TestCase):
5359
def test_no_flags(self):

0 commit comments

Comments
 (0)