2017-07-05 228 views
0

嗨,所以我想将W7:W46列复制并粘贴到另一个工作表中。我到目前为止的代码,使用OpenPyxl复制粘贴列范围

col_j = New_Burden['W'] 
for idx, cell in enumerate(col_j,1): 
    ws1.cell(row = idx, column = 10).value = cell.value 

能够复制整个列,但不幸的是也传输各种标题。一个解决方案,我已经试过是:

for row in New_Burden['W7:W46']: 
    for cell in row: 
     ws1.cell(row = 2, column = 10).value = cell.value 

但是,这仅复制W7

复制的
+0

你从哪里得到'idx'? – frankyjuang

+0

@frankyjuang idx只是一个变量名。 –

+0

因为'row'和'column'没有提交。 –

回答

1

第一值范围(['W7:W46'])从一个工作表到另一个工作表:
如果范围是重叠,在同一个Worksheet中也是可以的。

from openpyxl import Workbook 
# Create a new Workbook 
wb = Workbook() 
ws = wb.worksheets[0] 

from openpyxl.utils import range_boundaries 
# Define start Range(['J2']) in the new Worksheet 
min_col, min_row, max_col, max_row = range_boundaries('J2') 

# Iterate Range you want to copy 
for row, row_cells in enumerate(New_Burden['W7:W46'], min_row): 
    for column, cell in enumerate(row_cells, min_col): 
     # Copy Value from Copy.Cell to given Worksheet.Cell 
     ws.cell(row=row, column=column).value = cell.value 

如果你想要做上述多个不同的列, 使用上面的function

def copy_range(source_range, target_start): 
    # Define start Range(target_start) in the new Worksheet 
    min_col, min_row, max_col, max_row = range_boundaries(target_start) 

    # Iterate Range you want to copy 
    for row, row_cells in enumerate(New_Burden[source_range], min_row): 
     for column, cell in enumerate(row_cells, min_col): 
      # Copy Value from Copy.Cell to given Worksheet.Cell 
      ws.cell(row=row, column=column).value = cell.value 

for source_range, target_start in [('W7:W46','J2'), ('Y7:Y46','A2')]: 
    copy_range(source_range, target_start) 

测试与Python 3.4.2 - openpyxl:2.4 .1 - LibreOffice:4.3.3.2

相关问题