ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/ns_dev/Python/NinoCode/Active_prgs/ExcelEmptyRowRemover.py
Revision: 595
Committed: Sat Nov 7 14:54:52 2015 UTC (10 years, 4 months ago) by nino.borges
Content type: text/x-python
File size: 4733 byte(s)
Log Message:
This is after refactoring and is the version that I gave to app support and ESI

File Contents

# Content
1 """
2 Excel Empty Row Remover
3
4 Created by
5 Emanuel Borges
6 10.30.2015
7
8 Problem:
9 An issue came up with thousands of Excel files where they needed to be tiffed but because they had
10 millions of rows of empty but not technically empty data, they would tiff out in the millions of pages.
11 Since there was formatting on those rows, LAW wouldnt remove the empty pages. Imaging in Relativity
12 also didnt work, since it would just error out.
13
14 Solution: This program will take a directory of Excel files, open them, using COM, and do the following, for every
15 sheet in the document:
16 * Unhide all rows and columns
17 * Remove filters
18 * Determine the largest sheet area both for rows and columns
19 * Hide these "empty" rows.
20 * Save as a new version of the file.
21
22 """
23
24 import os
25 import win32com.client as win32
26 from win32com.client import constants as c
27
28 def ReturnExcelFormat(rowNumb,columnNumb):
29 """Converts row and column numbers to Excel format."""
30 LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
31 result = []
32 while columnNumb:
33 columnNumb, remdr = divmod(columnNumb-1, 26)
34 result[:0] = LETTERS[remdr]
35 return ''.join(result)+str(rowNumb)
36
37 def ProcessFile(absFilePath):
38 """The main method for this program that processes a single file."""
39 excel = win32.gencache.EnsureDispatch('Excel.Application')
40 excel.Application.ScreenVisible = False
41 print "\nNow processing %s\n"%absFilePath
42 wb = excel.Workbooks.Open(absFilePath)
43 excel.Application.ScreenUpdating = False
44
45 sheetCount = wb.Sheets.Count
46 for sheetNumb in range(1,sheetCount+1):
47 ws = wb.Worksheets(sheetNumb)
48 lastrow = ws.Cells.Find(What="*",After=ws.Range("A1"),LookAt=c.xlPart,LookIn=c.xlFormulas,SearchOrder=c.xlByRows,SearchDirection=c.xlPrevious,MatchCase=False).Row
49 emptyList = []
50 lastcol = ws.Cells.Find(What="*",After=ws.Range("A1"),LookAt=c.xlPart,LookIn=c.xlFormulas,SearchOrder=c.xlByRows,SearchDirection=c.xlPrevious,MatchCase=False).Column
51 print "working on worksheet %s. %s rows"%(sheetNumb,lastrow)
52
53 ## Removing any filters in a try, since it will error if there isnt a filter applied.
54 print "Removing any filters..."
55 try:
56 ws.ShowAllData()
57 except:
58 pass
59 print "Done."
60 print "Unhiding all rows..."
61 ## Unhiding all rows
62 ws.Rows("1:%d"%lastrow).EntireRow.Hidden = False
63 print "Done."
64 print "Unhiding all columns..."
65 ## Unhiding all columns
66 ws.Columns.EntireColumn.Hidden = False
67 print "Done."
68
69 print "processing sheet..."
70
71 r = ws.Range("A1:%s"%ReturnExcelFormat(lastrow,lastcol))
72 rows = r.Rows.Count
73 emptyRowBeg = False
74 for i in range(1,rows+1):
75 if excel.WorksheetFunction.CountA(r.Rows(i)) == 0:
76 if emptyRowBeg:
77 pass
78 else:
79 emptyRowBeg = i
80 else:
81 if emptyRowBeg:
82 emptyList.append(("%s,%s")%(emptyRowBeg,i-1))
83 emptyRowBeg = False
84 for x in emptyList:
85 beg,end = x.split(",")
86 ws.Rows("%d:%d"%(int(beg),int(end))).EntireRow.Hidden = True
87
88
89 for i in range(1,rows+1):
90 if excel.WorksheetFunction.CountA(r.Rows(i)) == 0:
91 if emptyRowBeg:
92 pass
93 else:
94 emptyRowBeg = i
95 else:
96 if emptyRowBeg:
97 emptyList.append(("%s,%s")%(emptyRowBeg,i-1))
98 emptyRowBeg = False
99 for x in emptyList:
100 beg,end = x.split(",")
101 ws.Rows("%d:%d"%(int(beg),int(end))).EntireRow.Hidden = True
102
103 print "Sheet processed."
104 print "Saving..."
105 pth,ext = os.path.splitext(absFilePath)
106 ## ALWAYS SAVE THE WORKBOOK AND NOT JUST THE SHEET. WB NOT WS
107 wb.SaveAs(pth + "Fixed"+ext)
108 wb.Close()
109 print "Saved and closed."
110 excel.Application.ScreenUpdating = True
111
112 if __name__ == '__main__':
113 startDir = r"R:\0-Labels_and_Forms\Many Tool for Excel files"
114 #startDir = r"C:\Test\FinalTest"
115
116 raw_input("\n\nExcel Empty Row Remover\nVersion 1.0.0\nCreated by Emanuel Borges\n\nThis program will processs all of the files in the following directory.\n%s\n\n\n Press any key to start.\n\n"%startDir)
117 for f in os.listdir(startDir):
118 if os.path.isfile(os.path.join(startDir,f)):
119 ProcessFile(os.path.join(startDir,f))
120 raw_input("\nAll Files Processed.\n\nPress Enter to continue...")