Как написать набор списков в Excel с помощью xlsxwriter (без pandas)?

#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. Это хороший способ отслеживать текущую компанию, которая пишется, предполагая, что все детали, касающиеся компаний, одинаковой длины, это правильный путь.