Python для удаления строки в таблице Excel - PullRequest
2 голосов
/ 12 апреля 2011

У меня действительно большой файл Excel, и мне нужно удалить около 20 000 строк, в зависимости от выполнения простого условия, и Excel не позволит мне удалить такой сложный диапазон при использовании фильтра.Условие:

Если первый столбец содержит значение X, то мне нужно иметь возможность удалить всю строку.

Я пытаюсь автоматизироватьэто с использованием Python и XLWT, но я не совсем уверен, с чего начать.Ищу несколько фрагментов кода, чтобы начать меня ... Благодарю за любую помощь, которая там есть!

Ответы [ 6 ]

9 голосов
/ 12 апреля 2011

Не удалять. Просто скопируйте то, что вам нужно.

  1. прочитать оригинальный файл
  2. открыть новый файл
  3. итерация по строкам исходного файла (если первый столбец строки не содержит значения X, добавьте эту строку в новый файл)
  4. закрыть оба файла
  5. переименовать новый файл в исходный файл
2 голосов
/ 12 апреля 2011

Вы можете попробовать использовать csv reader:

http://docs.python.org/library/csv.html

1 голос
/ 12 апреля 2011

Мне нравится использовать COM-объекты для такого рода развлечений:

import win32com.client
from win32com.client import constants

f = r"h:\Python\Examples\test.xls"
DELETE_THIS = "X"

exc = win32com.client.gencache.EnsureDispatch("Excel.Application")
exc.Visible = 1
exc.Workbooks.Open(Filename=f)

row = 1
while True:
    exc.Range("B%d" % row).Select()
    data = exc.ActiveCell.FormulaR1C1
    exc.Range("A%d" % row).Select()
    condition = exc.ActiveCell.FormulaR1C1

    if data == '':
        break
    elif condition == DELETE_THIS:
        exc.Rows("%d:%d" % (row, row)).Select()
        exc.Selection.Delete(Shift=constants.xlUp)
    else:
        row += 1

# Before
# 
#      a
#      b
# X    c
#      d
#      e
# X    d
#      g
#        

# After
#
#      a
#      b
#      d
#      e
#      g

Я обычно записываю фрагменты макросов Excel и склеиваю их вместе с Python, так как мне не нравится Visual Basic: -D.

0 голосов
/ 26 января 2017

Вы можете использовать,

sh.Range(sh.Cells(1,1),sh.Cells(20000,1)).EntireRow.Delete()

удалит строки от 1 до 20000 в открытой электронной таблице Excel, поэтому

if sh.Cells(1,1).Value == 'X':

   sh.Cells(1,1).EntireRow.Delete()
0 голосов
/ 06 января 2016

Я достиг этого, используя пакет Pandas ....

import pandas as pd

#Read from Excel
xl= pd.ExcelFile("test.xls")

#Parsing Excel Sheet to DataFrame
dfs = xl.parse(xl.sheet_names[0])

#Update DataFrame as per requirement
#(Here Removing the row from DataFrame having blank value in "Name" column)

dfs = dfs[dfs['Name'] != '']

#Updating the excel sheet with the updated DataFrame

dfs.to_excel("test.xls",sheet_name='Sheet1',index=False)
0 голосов
/ 12 апреля 2011

Если вам просто нужно удалить данные (а не «избавиться» от строки, то есть она сдвигает строки), вы можете попробовать использовать мой модуль PyWorkbooks. Вы можете получить самую последнюю версию здесь:

https://sourceforge.net/projects/pyworkbooks/

Существует руководство в формате pdf, которое поможет вам понять, как его использовать. Удачного кодирования!

...