switch openpyxl for calamine

This commit is contained in:
yeungadrian 2024-12-30 22:24:50 +00:00
parent 125e206047
commit 328c67cdaf
6 changed files with 21 additions and 9 deletions

View file

@ -29,9 +29,9 @@ dependencies = [
"mammoth", "mammoth",
"markdownify", "markdownify",
"numpy", "numpy",
"python-calamine",
"python-pptx", "python-pptx",
"pandas", "pandas",
"openpyxl",
"pdfminer.six", "pdfminer.six",
"puremagic", "puremagic",
"pydub", "pydub",

View file

@ -713,18 +713,18 @@ class DocxConverter(HtmlConverter):
return result return result
class XlsxConverter(HtmlConverter): class ExcelConverter(HtmlConverter):
""" """
Converts XLSX files to Markdown, with each sheet presented as a separate Markdown table. Converts excel files to Markdown, with each sheet presented as a separate Markdown table.
""" """
def convert(self, local_path, **kwargs) -> Union[None, DocumentConverterResult]: def convert(self, local_path, **kwargs) -> Union[None, DocumentConverterResult]:
# Bail if not a XLSX # Bail if not a XLSX
extension = kwargs.get("file_extension", "") extension = kwargs.get("file_extension", "")
if extension.lower() != ".xlsx": if extension.lower() not in [".xlsx", ".xls", ".xlsm", ".xlsb"]:
return None return None
sheets = pd.read_excel(local_path, sheet_name=None) sheets = pd.read_excel(local_path, sheet_name=None, engine="calamine")
md_content = "" md_content = ""
for s in sheets: for s in sheets:
md_content += f"## {s}\n" md_content += f"## {s}\n"
@ -1277,7 +1277,7 @@ class MarkItDown:
self.register_page_converter(YouTubeConverter()) self.register_page_converter(YouTubeConverter())
self.register_page_converter(BingSerpConverter()) self.register_page_converter(BingSerpConverter())
self.register_page_converter(DocxConverter()) self.register_page_converter(DocxConverter())
self.register_page_converter(XlsxConverter()) self.register_page_converter(ExcelConverter())
self.register_page_converter(PptxConverter()) self.register_page_converter(PptxConverter())
self.register_page_converter(WavConverter()) self.register_page_converter(WavConverter())
self.register_page_converter(Mp3Converter()) self.register_page_converter(Mp3Converter())

BIN
tests/test_files/test.xls vendored Normal file

Binary file not shown.

BIN
tests/test_files/test.xlsb vendored Normal file

Binary file not shown.

BIN
tests/test_files/test.xlsm vendored Normal file

Binary file not shown.

View file

@ -48,7 +48,7 @@ YOUTUBE_TEST_STRINGS = [
"the model we're going to be using today is GPT 3.5 turbo", # From the transcript "the model we're going to be using today is GPT 3.5 turbo", # From the transcript
] ]
XLSX_TEST_STRINGS = [ EXCEL_TEST_STRINGS = [
"## 09060124-b5e7-4717-9d07-3c046eb", "## 09060124-b5e7-4717-9d07-3c046eb",
"6ff4173b-42a5-4784-9b19-f49caff4d93d", "6ff4173b-42a5-4784-9b19-f49caff4d93d",
"affc7dad-52dc-4b98-9b5d-51e65d8a8ad0", "affc7dad-52dc-4b98-9b5d-51e65d8a8ad0",
@ -174,7 +174,19 @@ def test_markitdown_local() -> None:
# Test XLSX processing # Test XLSX processing
result = markitdown.convert(os.path.join(TEST_FILES_DIR, "test.xlsx")) result = markitdown.convert(os.path.join(TEST_FILES_DIR, "test.xlsx"))
validate_strings(result, XLSX_TEST_STRINGS) validate_strings(result, EXCEL_TEST_STRINGS)
# Test XLS processing
result = markitdown.convert(os.path.join(TEST_FILES_DIR, "test.xls"))
validate_strings(result, EXCEL_TEST_STRINGS)
# Test XLSM processing
result = markitdown.convert(os.path.join(TEST_FILES_DIR, "test.xlsm"))
validate_strings(result, EXCEL_TEST_STRINGS)
# Test XLSB processing
result = markitdown.convert(os.path.join(TEST_FILES_DIR, "test.xlsb"))
validate_strings(result, EXCEL_TEST_STRINGS)
# Test DOCX processing # Test DOCX processing
result = markitdown.convert(os.path.join(TEST_FILES_DIR, "test.docx")) result = markitdown.convert(os.path.join(TEST_FILES_DIR, "test.docx"))
@ -206,7 +218,7 @@ def test_markitdown_local() -> None:
# Test ZIP file processing # Test ZIP file processing
result = markitdown.convert(os.path.join(TEST_FILES_DIR, "test_files.zip")) result = markitdown.convert(os.path.join(TEST_FILES_DIR, "test_files.zip"))
validate_strings(result, XLSX_TEST_STRINGS) validate_strings(result, EXCEL_TEST_STRINGS)
# Test Wikipedia processing # Test Wikipedia processing
result = markitdown.convert( result = markitdown.convert(