#python #excel #list #xlsxwriter
#python #excel #Список #xlsxwriter
Вопрос:
Я создал 3 отдельных списка и добавил их в пустой.
Я хотел бы записать каждый список в Excel в столбце Company
, Sector
, URL
.
Я безуспешно пытался повторить их.
Я бы хотел сделать это, не проходя через Pandas.
import xlsxwriter
workbook = xlsxwriter.Workbook('example.xlsx')
worksheet = workbook.add_worksheet('To add')
companies = ['House1', 'House2']
sector = ['Kitchen', 'Living room']
url = ['www.house1.com', 'www.house2.com']
list_companies = []
list_companies.append(companies)
list_companies.append(sector)
list_companies.append(url)
head = ['Company', 'Sector', 'URL']
bold = workbook.add_format({'bold':True})
worksheet.write_row(0,0,head, bold)
workbook.close()
Ответ №1:
Вероятно, самый чистый способ — использовать write_column()
метод. Вот так:
import xlsxwriter
workbook = xlsxwriter.Workbook('example.xlsx')
worksheet = workbook.add_worksheet('To add')
companies = ['House1', 'House2']
sector = ['Kitchen', 'Living room']
url = ['http://www.house1.com', 'http://www.house2.com']
head = ['Company', 'Sector', 'URL']
bold = workbook.add_format({'bold':True})
# Make some of the columns wider for clarity.
worksheet.set_column(0, 1, 12)
worksheet.set_column(2, 2, 20)
# Write the data.
worksheet.write_row(0,0,head, bold)
worksheet.write_column(1, 0, companies)
worksheet.write_column(1, 1, sector)
worksheet.write_column(1, 2, url)
workbook.close()
Вывод:
Обратите внимание, я добавил http://
к URL-адресам, чтобы они были преобразованы XlsxWriter в ссылки Excel.
Для записи данных с помощью XlsxWriter смотрите раздел «Работа с данными и запись данных» документов XlsxWriter.
Комментарии:
1. спасибо, я думаю, что это решение для меня проще понять.
2. Я только что попробовал worksheet.set_column(0, 1, 12), но это не влияет на ячейки. Можете ли вы объяснить, почему вы использовали его два раза? Спасибо.
3. Он изменяет ширину столбца (и другие свойства, если требуется). Он вызывается дважды, чтобы установить 2 разные ширины для 2 разных диапазонов. Это просто для того, чтобы сделать вывод более понятным. Это не требуется. Смотрите здесь объяснение: xlsxwriter.readthedocs.io/worksheet.html#worksheet-set-column
Ответ №2:
Преобразовал агрегацию списков в словарь для удобства.
Для записи в Excel используйте worksheet.write(row, col, *args)
следующее:
import xlsxwriter
workbook = xlsxwriter.Workbook('example.xlsx')
worksheet = workbook.add_worksheet('To add')
companies = ['House1', 'House2']
sectors = ['Kitchen', 'Living room']
urls = ['www.house1.com', 'www.house2.com']
companies_dictionary = {}
companies_dictionary['companies'] = companies
companies_dictionary['sector'] = sectors
companies_dictionary['url'] = urls
head = ['Company', 'Sector', 'URL']
bold = workbook.add_format({'bold': True})
worksheet.write_row(0, 0, head, bold)
head_offset = 1
for company_index in range(len(companies_dictionary['companies'])):
current_excel_row_number = company_index head_offset 1
worksheet.write(f'A{current_excel_row_number}', companies_dictionary['companies'][company_index])
worksheet.write(f'B{current_excel_row_number}', companies_dictionary['sector'][company_index])
worksheet.write(f'C{current_excel_row_number}', companies_dictionary['url'][company_index])
workbook.close()
Результат:
Company Sector URL
House1 Kitchen www.house1.com
House2 Living room www.house2.com
Комментарии:
1. спасибо за ответ. Почему он должен проходить через rows_number = len(companies) ? Есть ли другой способ сделать это?
2. Добро пожаловать @Steven. Это хороший способ отслеживать текущую компанию, которая пишется, предполагая, что все детали, касающиеся компаний, одинаковой длины, это правильный путь.