Не найдено ничего подобного .EntireColumn.Insert
in openpyxl.
Первое, что приходит мне в голову, - вставить столбец вручную, изменив _cells на листе. Я не думаю, что это лучший способ, чтобы вставить столбец, но он работает:
from openpyxl.workbook import Workbook
from openpyxl.cell import get_column_letter, Cell, column_index_from_string, coordinate_from_string
wb = Workbook()
dest_filename = r'empty_book.xlsx'
ws = wb.worksheets[0]
ws.title = "range names"
# inserting sample data
for col_idx in xrange(1, 10):
col = get_column_letter(col_idx)
for row in xrange(1, 10):
ws.cell('%s%s' % (col, row)).value = '%s%s' % (col, row)
# inserting column between 4 and 5
column_index = 5
new_cells = {}
ws.column_dimensions = {}
for coordinate, cell in ws._cells.iteritems():
column_letter, row = coordinate_from_string(coordinate)
column = column_index_from_string(column_letter)
# shifting columns
if column >= column_index:
column += 1
column_letter = get_column_letter(column)
coordinate = '%s%s' % (column_letter, row)
# it's important to create new Cell object
new_cells[coordinate] = Cell(ws, column_letter, row, cell.value)
ws._cells = new_cells
wb.save(filename=dest_filename)
Я понимаю, что это решение очень некрасиво, но я надеюсь, что это поможет вам думать в правильном направлении.
Похоже, что все должно быть хорошо. Рабочий лист, который я использовал бы с этим, всего лишь несколько сотен строк в длину, и мне нужно только вставить два столбца, чтобы это работало отлично. Внедрите это сразу. Благодаря! – Shawn
Хотя это работает, стоит отметить, что это сильно зависит от внутренних изменений, которые будут меняться. Код также несовместим с Python 3. Для более широкого решения см. Https://bitbucket.org/snippets/openpyxl/qyzKn –