WinError 32 Процесс не может получить доступ к файлу, потому что он используется другим процессом, не может удалить файл через python или вручную - PullRequest
0 голосов
/ 30 марта 2019

Привет, ребята. У меня есть программа, которая создает и сохраняет файл xlsx, затем открывает его и конвертирует в pdf ... но затем я хочу удалить исходный файл xlsx.

  1. создает оба файла в правильном каталоге.
  2. Однако он не удаляет xlsx, и я не могу удалить его вручную, так как он говорит, что файл все еще открыт
        wb.save(NEW_RECEIPT_PATH + new_file_name_xlsx)


        #this should turn the xlsx into a pdf
        xlApp = client.Dispatch("Excel.Application")
        books = xlApp.Workbooks.Open(NEW_RECEIPT_PATH + new_file_name_xlsx)
        ws2 = books.Worksheets[0]
        ws2.Visible = 1
        save_the_pdf = NEW_RECEIPT_PATH + new_file_name_pdf
        ws2.ExportAsFixedFormat(0,save_the_pdf)

        #this removes the xlsx file
        os.remove(NEW_RECEIPT_PATH + new_file_name_xlsx)

Я догадываюсь, что я не использовал .close () в нужном месте и что он оставил файл Excel открытым. Я пытался ...

        wb.save(NEW_RECEIPT_PATH + new_file_name_xlsx)
        wb.close()


        #this should turn the xlsx into a pdf
        xlApp = client.Dispatch("Excel.Application")
        books = xlApp.Workbooks.Open(NEW_RECEIPT_PATH + new_file_name_xlsx)
        ws2 = books.Worksheets[0]
        ws2.Visible = 1
        save_the_pdf = NEW_RECEIPT_PATH + new_file_name_pdf
        ws2.ExportAsFixedFormat(0,save_the_pdf)


        #this removes the xlsx file
        os.remove(NEW_RECEIPT_PATH + new_file_name_xlsx)

безрезультатно. Будем благодарны за любые подсказки.

-update-

Я определил проблему в этих строках ...

#this should turn the xlsx into a pdf
        xlApp = client.Dispatch("Excel.Application")
        books = xlApp.Workbooks.Open(NEW_RECEIPT_PATH + new_file_name_xlsx)
        ws2 = books.Worksheets[0]
        ws2.Visible = 1
        save_the_pdf = NEW_RECEIPT_PATH + new_file_name_pdf
        ws2.ExportAsFixedFormat(0,save_the_pdf)

Файл xlsx остается открытым, и я не позволю мне удалить его с помощью кода ... то же самое с удалением файла xlsx вручную. Мне нужно дважды щелкнуть файл, чтобы открыть его, а затем закрыть, прежде чем я смогу удалить.

Как закрыть файл xlsx в конце этого кода?

1 Ответ

0 голосов
/ 01 апреля 2019

Непринужденно, ребята .... как я думал, я не закрыл это должным образом. Код ниже работает блестяще.

Черт, я ненавижу застрять на несколько дней.

#this should turn the xlsx into a pdf
        xlApp = client.Dispatch("Excel.Application")
        books = xlApp.Workbooks.Open(NEW_RECEIPT_PATH + new_file_name_xlsx)
        ws2 = books.Worksheets[0]
        ws2.Visible = 1
        save_the_pdf = NEW_RECEIPT_PATH + new_file_name_pdf
        ws2.ExportAsFixedFormat(0,save_the_pdf)
        books.Close(True) # save the workbook

        #this removes the xlsx file
        os.remove(NEW_RECEIPT_PATH + new_file_name_xlsx)
...