Как эффективно заполнить значения в один столбец в файле Excel с помощью Pywin32? - PullRequest
1 голос
/ 17 февраля 2012

Я знаю, что могу заполнить строки, используя источник в массиве, используя Pywin32, как

import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = True
wb = excel.Workbooks.Add()
ws = wb.Worksheets('Sheet1')
ws.Range("A4:D4").Value = [i for i in range(1,5)]

Но в случае с одним столбцом, когда я пытаюсь это сделать, как

ws.Range("A1:A4").Value = [i for i in range(1,5)]

Я получил четыре 1 в столбце «А», но я хотел получить 1, 2, 3, 4 в столбце «А»

Есть ли похожий способ работы с колонкой?

Если нет, какой самый эффективный способ заполнить несколько ячеек за один раз?

Ответы [ 2 ]

1 голос
/ 08 августа 2012

Что вам нужно сделать, это

import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = True
wb = excel.Workbooks.Add()
ws = wb.Worksheets('Sheet1')
ws.Range("A1:A4").Value = [[i] for i in range(1,5)]

То, что вы делали раньше, пытались поместить [1, 2, 3, 4] в столбец.Однако при преобразовании в формат Excel массив всегда преобразуется в строку.Поэтому, когда вы создаете двумерный массив, вы создаете массив строк, как Excel просматривает столбец.Итак, что вы хотите, это [[1], [2], [3], [4]].Вот что генерирует приведенный выше код.

РЕДАКТИРОВАТЬ: я понимаю, что это может быть не самая лучшая формулировка в мире.Если вы не поняли, просто спросите, и я постараюсь найти лучшее объяснение.

0 голосов
/ 17 февраля 2012

Вы можете сделать:

for col_idx, i in enumerate(xrange(1,5)):
    ws.Cells(1, col_idx+1).Value = i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...