I am trying to convert xls file to xlsx using the following code
import pandas as pd
from bs4 import BeautifulSoup
def convert_to_xlsx():
with open('2356.xls') as xml_file:
soup = BeautifulSoup(xml_file.read(), 'xml')
writer = pd.ExcelWriter('sample.xlsx')
for sheet in soup.findAll('Worksheet'):
sheet_as_list = []
for row in sheet.findAll('Row'):
sheet_as_list.append([cell.Data.text if cell.Data else '' for cell in row.findAll('Cell')])
pd.DataFrame(sheet_as_list).to_excel(writer, sheet_name=sheet.attrs['ss:Name'], index=False, header=False)
writer.save()
convert_to_xlsx()
The code works with no errors but the output xlsx is blank with no data inside Any ideas?
When opening the file with notepad I noticed the contents like that
<?xml version="1.0" encoding="utf-8"?>
<?mso-application progid="Excel.Sheet"?>
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<ss:Styles>
<ss:Style ss:ID="General" />
<ss:Style ss:ID="Number">
<ss:NumberFormat ss:Format="General Number" />
</ss:Style>
<ss:Style ss:ID="DateTime">
<ss:NumberFormat ss:Format="General Date" />
</ss:Style>
<ss:Style ss:ID="Currency">
<ss:NumberFormat ss:Format="Currency" />
</ss:Style>
<ss:Style ss:ID="ShortDate">
<ss:NumberFormat ss:Format="Short Date" />
</ss:Style>
</ss:Styles>
<ss:Worksheet ss:Name="Sheet1">
<ss:Table>
<ss:Row>
<ss:Cell>
<ss:Data ss:Type="String">إسم الخصم</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">رقم العقد</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">سبب المديونية</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">قيمة المطالبة</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">تاريخ الورود</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">جنسية العميل</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">تاريخ الإنذار</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">قيمة المصروف</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">تاريخ المصروف</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">نوع المصروف</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">رقم أمر الأداء</ss:Data>
</ss:Cell>
<ss:Cell>
<ss:Data ss:Type="String">الرقم الآلي</ss:Data>
</ss:Cell>
</ss:Row>
<ss:Row>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">ميثم عبدالله حسين اشكناني</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">700000045332</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">بيع مرابحة محلي</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="Number">
<ss:Data ss:Type="Number">48948.176</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="ShortDate">
<ss:Data ss:Type="DateTime">2020-10-28T00:00:00</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">كويتي</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String"></ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="Number">
<ss:Data ss:Type="Number">50</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="ShortDate">
<ss:Data ss:Type="DateTime">2022-03-23T00:00:00</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">مصروفات حجز سيارة</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">2021/500969</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">211856060</ss:Data>
</ss:Cell>
</ss:Row>
<ss:Row>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">ميثم عبدالله حسين اشكناني</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">700000045332</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">بيع مرابحة محلي</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="Number">
<ss:Data ss:Type="Number">48948.176</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="ShortDate">
<ss:Data ss:Type="DateTime">2020-10-28T00:00:00</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">كويتي</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String"></ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="Number">
<ss:Data ss:Type="Number">50</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="ShortDate">
<ss:Data ss:Type="DateTime">2022-03-23T00:00:00</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">مصروفات حجز سيارة</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">2021/500969</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">211856060</ss:Data>
</ss:Cell>
</ss:Row>
<ss:Row>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">ميثم عبدالله حسين اشكناني</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">700000045332</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">بيع مرابحة محلي</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="Number">
<ss:Data ss:Type="Number">48948.176</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="ShortDate">
<ss:Data ss:Type="DateTime">2020-10-28T00:00:00</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">كويتي</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String"></ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="Number">
<ss:Data ss:Type="Number">50</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="ShortDate">
<ss:Data ss:Type="DateTime">2022-03-23T00:00:00</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">مصروفات حجز سيارة</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">2021/500969</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">211856060</ss:Data>
</ss:Cell>
</ss:Row>
<ss:Row>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">ميثم عبدالله حسين اشكناني</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">700000045332</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">بيع مرابحة محلي</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="Number">
<ss:Data ss:Type="Number">48948.176</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="ShortDate">
<ss:Data ss:Type="DateTime">2020-10-28T00:00:00</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">كويتي</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String"></ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="Number">
<ss:Data ss:Type="Number">50</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="ShortDate">
<ss:Data ss:Type="DateTime">2022-03-23T00:00:00</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">مصروفات حجز سيارة</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">2021/500969</ss:Data>
</ss:Cell>
<ss:Cell ss:StyleID="General">
<ss:Data ss:Type="String">211856060</ss:Data>
</ss:Cell>
</ss:Row>
</ss:Table>
</ss:Worksheet>
</ss:Workbook>
CodePudding user response:
I've just opened the original xls with excel and it works ok, did you try pd.read_excel
?
CodePudding user response:
After many hours of search, I could create a code that enables me to convert those files (It was not acceptable to do that manually as I have more than 200 files in a folder) and this is a weekly task
import os
from glob import glob
from win32com.client import Dispatch
def convert_xls_to_xlsx(oldName:str, newName:str):
oldName = os.path.abspath(oldName)
newName = os.path.abspath(newName)
xlApp = Dispatch('Excel.Application')
wb = xlApp.Workbooks.Open(oldName)
wb.SaveAs(newName,51)
wb.Close(True)
allFiles = [a for a in glob("XML\*.xls")]
for file in allFiles:
print(file)
new_path = '.\\XLS\\' str(file.split('\\')[-1][:-4]) '.xlsx'
convert_xls_to_xlsx(file, new_path)