2013-04-05 19 views
7

Varolan bir excel belgesini değiştiren bir komut dosyası üzerinde çalışıyorum ve VBA makro komutu .EntireColumn.Insert gibi iki sütunun arasına sütun ekleme yeteneğine sahip olmam gerekiyor.Openpyxl kullanarak sütun ekleme

Böyle bir sütun eklemek için openpyxl ile herhangi bir yöntem var mı?
Değilse, bir yazma herhangi bir tavsiye?

cevap

6

openpyxl içinde .EntireColumn.Insert böyle bir şey bulamadı. Aklıma gelen

İlk düşünce, bir çalışma üzerinde _cells değiştirerek elle sütun eklemek etmektir. Bunun sütun eklemek için en iyi yol olduğunu sanmıyorum ama işe yarıyor:

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) 

Bu çözüm çok çirkin olduğunu anlıyoruz ama bir doğru yönde düşünmeye yardımcı umuyoruz. gayet yapmalıyım gibi

+0

Bu görünüyor. Bunu kullanacağım çalışma sayfası en az birkaç yüz satır uzunluğunda ve sadece iki sütun eklemem gerekiyor, bu yüzden mükemmel çalışmalı. Bunu hemen uygulayacağım. Teşekkürler! – Shawn

+1

Bu işe yarıyorsa, değişecek içsellere büyük ölçüde bağlı olduğuna dikkat etmelisiniz. Kod daha kapsamlı bir çözümü bkz https://bitbucket.org/snippets/openpyxl/qyzKn için de Python 3 ile uyumlu değildir –