diff --git a/pyproject.toml b/pyproject.toml index bbb1141..cb79fb6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,8 +30,8 @@ dependencies = [ "markdownify", "numpy", "python-pptx", - "pandas", "python-calamine", + "tabulate", "pdfminer.six", "puremagic", "pydub", diff --git a/src/markitdown/_markitdown.py b/src/markitdown/_markitdown.py index ec4f63f..848656b 100644 --- a/src/markitdown/_markitdown.py +++ b/src/markitdown/_markitdown.py @@ -22,10 +22,11 @@ import mammoth import markdownify import olefile -import pandas as pd import pdfminer import pdfminer.high_level import pptx +from python_calamine import load_workbook +from tabulate import tabulate # File-format detection import puremagic @@ -726,11 +727,14 @@ def convert(self, local_path, **kwargs) -> Union[None, DocumentConverterResult]: if extension.lower() not in [".xlsx", ".xls", ".xlsb", ".xlsm"]: return None - sheets = pd.read_excel(local_path, sheet_name=None, engine="calamine") + workbook = load_workbook(local_path) md_content = "" - for s in sheets: + for s in workbook.sheet_names: + sheet = workbook.get_sheet_by_name(s) + # TODO: Add argument to allow filtering empty row / columns + tabular_data = sheet.to_python(skip_empty_area=False) md_content += f"## {s}\n" - html_content = sheets[s].to_html(index=False) + html_content = tabulate(tabular_data, tablefmt="html") md_content += self._convert(html_content).text_content.strip() + "\n\n" return DocumentConverterResult( diff --git a/tests/test_markitdown.py b/tests/test_markitdown.py index 682617a..4980c40 100644 --- a/tests/test_markitdown.py +++ b/tests/test_markitdown.py @@ -54,12 +54,6 @@ "affc7dad-52dc-4b98-9b5d-51e65d8a8ad0", ] -XLS_TEST_STRINGS = [ - "## 09060124-b5e7-4717-9d07-3c046eb", - "6ff4173b-42a5-4784-9b19-f49caff4d93d", - "affc7dad-52dc-4b98-9b5d-51e65d8a8ad0", -] - DOCX_TEST_STRINGS = [ "314b0a30-5b04-470b-b9f7-eed2c2bec74a", "49e168b7-d2ae-407f-a055-2167576f39a1",