Avoid pop-ups in Excel while running code in Python - python

I want to be able to open an Excel document and start manipulating the data without seeing any pop-ups.
I think the pop-ups are the ones stopping my Excel file from opening successfully. Here are the pop-ups I am seeing at excel and I would like to automatically answer them instead of doing it manually. I found some answers online but not for my case.
The file format and extension of "xxx" don't match. The file could be
corrupted or unsafe. Unless you trust its source, don't open it. Do
you want to open it anyway?
option1: Yes , option2: No , option3: Help
or
Open XML Please select how you would like to open this file:
As an XML table
As a read-only workbook
use the XML Source task pane
or
XML Import Error
ok
help
After I select: Yes & As an XML table & ok, everything works perfectly. If anyone could help me out I would much appreciate it.

Related

XML and Excel Structures, debugging and etc

I'm currently working on this project: https://github.com/lucasmolinari/unlocker-EX.
It's a excel unlocker, it works by editing the XML files inside the workbooks. (more information on the github page).
The script works fine in workbooks with almost no content inside, but recently I'm testing some bigger workbooks, and when I open the unlocked file, excel says it's corrupted and I can't find any difference between the original and the unlocked workbook, I'm 100% sure the problem is when the script change the content in the file, I watched every step of the script and it just stops working when the files are edited.
Does someone have more knowlege on how XML files work or in the structure of excel workbooks? Or like, some way to verify the differences between the original file and the edited to see if is some formatting problem..? I'm really sorry about this question, but I have no idea from where to start now, I tried everything I can.
Changed to open files in UTF-8 format and tried to find any corrupted character in the edited file,but manually is too hard to find any.
Using ElementTree library solves the problem

Adding XML Source to xlsx file in python

I am trying to create a xlsx from a template exported from Microsoft dynamics NAV, so I can upload my file to the system.
I am able to recreate and fill the template using the library xlsxwriter, but unfortunately I have figured out that the template file also have an attached XML source code file(visible in the developer tab in Excel).
I can easily modify the XML file to match what I want, but I can't seem to find a way to add the XML source code to the xlsx file.
I have searched for "python adding xlsx xml source" but it doesn't seem to give me anything I can use.
Any help would be greatly appreciated.
Best regards
Martin
Xlsx file is basically a zip archive. Open it as archive and you'll probably be able to find the XML file and modify it. –
Mak Sim
yesterday

Excel prompts "Name cannot be the same as built-in name" when opened by win32com but not when opened by me manually

I'm trying to automate some things with python, one of the steps is opening the .xlsx file using the "win32com.client" module and then printing a few sheets into PDF.
It all works fine if I have the file already opened in Excel, but if the Python script wants to open it, Excel asks me to set a different name for "_FilterDatabase" and "Print_Area", even though I can open it manually with no issues.
If I do change the names, then I have to set all the print areas again. Saving the file with new print areas causes the same issue. I don't have any idea why opening the file with win32com is different than opening it manually.
Here's the simple code, just for opening the file:
import win32com.client
wb_path = r'D:\Users\Agenerick\Documents\Projects\sprawozdania-gen\excel\a.xlsx'
o = win32com.client.Dispatch("Excel.Application")
o.Visible = True
o.Workbooks.Open(wb_path)
I've tried using the ReadOnly flag and xlwings, even using ComObject in Powershell, no difference, however, opening the file using subprocess went fine, but then I can't really hide the window. I also don't have any other versions of Excel installed.
Friend helped me with it and found a post in German with a similar bug. The way I fixed it is I replaced o.Workbooks.Open(wb_path) with o.Workbooks.OpenXML(wb_path)
Apparently it's a bug with Excel. After that I also had to change wb.Worksheets.Select() (or something similar) to wb.Sheets.Select()

Working with Password Protected Excel Sheets in Python on Linux

The problem is pretty simple. Every week I receive a bunch of password protected excel files. I have to parse through them and write certain parts to a new file using Python. I am given the password for the files.
This was simple to handle when this was being done on Windows and I could just import win32com and use client.Dispatch. But we are now moving all our code to linux so no more win32com for me.
Is there a way to open and read data from a password protected excel sheet in python on linux?
I have been searching for simple way to open a password protected excel file but no luck. I also tried finding a way to just remove the password protection so I can use xlrd like I would on a file that is not password protected but no luck going that route either.
Any help would be most appreciated.
with libreoffice and unoconv
unoconv --password='p4ssw0rd' -f csv protectedFile.xls
and then parse the csv file. Or export to another xls if you need the formatting or want to torture yourself
N.B. Edited after accepted. (--password is the correct switch, not -p, as noted by #enharmonic)
I've recently had an easier time using xlsxunpass
java -jar ./xlsxunpass.jar protected.xlsx unprotected.xlsx 'p4ssw0rd'

Module that can help control excel from within python application anything more needed than pywin32?

I have a viewer I built using WXPython. The viewer is basically a browser (built on IE wx.lib.iewin) that loads the txt or htm files I have in a directory and then lets me move through the files sequentially. Instead of having to go to the directory to select the next file to view the viewer/browser has a next button that loads the next file in the queue.
I want to be able to add a new feature that allows me to highlight some text that is visible in the browser and then push a button and have that text passed into a cell in excel.
Lots of things are going to have to happen like I need to be able to find and start a new instance of excel. I need to be able to add a new worksheet and pass some values to populate cells on the worksheet based on the file I am looking at and then if I want to collect some data from the file I want to be able to highlight the data in the viewer and then press a button on the viewer and have the data passed to excel.
I think I am going to start with PyWin32 but I am wondering if there is something else I need but I don't know enough to look for it.
If someone knows of an example where text was piped from a Python application to excel under the users control I would appreciate a pointer in that direction. It is easy enough I think to do this going from the application to a file that gets created (but not displayed) but I am hoping to go from the browser to the excel file so that the user can evaluate their work in progress.
I'd recomend using one of the python excel modules like python-excel.
It works on any OS, and without any other Excel application installed.
http://www.python-excel.org/
Code would look somehting liek this to write to a new xls document, slightly different to open an existing.
import xlwt
wbk = xlwt.Workbook()
sheet = wbk.add_sheet('sheet 1')
# indexing is zero based, row then column
sheet.write(0,1,'test text')
wbk.save('test.xls')
Hopefully this can get you on the right path, then you'll be able to post more specific questions if you run into problems.
Note: Another option is openpyxl:
http://packages.python.org/openpyxl/tutorial.html
If you're using wxPython (which I assume you are due to the tag), you should look at XLSGrid: http://www.blog.pythonlibrary.org/2011/08/20/wxpython-new-widget-announced-xlsgrid/
If you just want to work with Excel, I would recommend xlwt or xlrd, although you can use PyWin32 to work with it too via COM: http://www.blog.pythonlibrary.org/2010/07/16/python-and-microsoft-office-using-pywin32/

Categories