ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/ns_dev/Python/NinoCode/Active_prgs/ExcelEmptyRowRemover.py
Revision: 592
Committed: Tue Nov 3 22:48:00 2015 UTC (10 years, 4 months ago) by nino.borges
Content type: text/x-python
File size: 3738 byte(s)
Log Message:
First working version of this program that has everything in the if main section.

File Contents

# User Rev Content
1 nino.borges 592 """
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     * Determin the largest sheet area both for rows and columns
18     * Hide these "empty" rows.
19     * Save as a new version of the file.
20    
21     """
22    
23     import os
24     import win32com.client as win32
25     from win32com.client import constants as c
26    
27     if __name__ == '__main__':
28     startDir = r""
29    
30     ## Remove this after beta to loop through all files instead.
31     filePathAndName = r'c:\test\test.xlsx'
32    
33     excel = win32.gencache.EnsureDispatch('Excel.Application')
34     excel.Application.ScreenVisible = False
35     wb = excel.Workbooks.Open(filePathAndName)
36     excel.Application.ScreenUpdating = False
37    
38     sheetCount = wb.Sheets.Count
39     for sheetNumb in range(1,sheetCount+1):
40     ws = wb.Worksheets(sheetNumb)
41     lastrow = ws.Cells.Find(What="*",After=ws.Range("A1"),LookAt=c.xlPart,LookIn=c.xlFormulas,SearchOrder=c.xlByRows,SearchDirection=c.xlPrevious,MatchCase=False).Row
42     emptyList = []
43     lastcol = ws.Cells.Find(What="*",After=ws.Range("A1"),LookAt=c.xlPart,LookIn=c.xlFormulas,SearchOrder=c.xlByRows,SearchDirection=c.xlPrevious,MatchCase=False).Column
44     print "working on worksheet %s. %s rows"%(sheetNumb,lastrow)
45    
46     print "Unhiding all rows..."
47     ## Unhiding all rows
48     ws.Rows.EntireRow.Hidden = False
49     print "Done."
50     print "Unhiding all columns..."
51     ## Unhiding all columns
52     ws.Columns.EntireRow.Hidden = False
53     print "Done."
54    
55     print "processing sheet..."
56     ## got to be a better way to do this.
57     LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
58     result = []
59     while lastcol:
60     lastcol, rem = divmod(lastcol-1, 26)
61     result[:0] = LETTERS[rem]
62     r = ws.Range("A1:%s"%''.join(result)+str(lastrow))
63     rows = r.Rows.Count
64     emptyRowBeg = False
65     for i in range(1,rows+1):
66     if excel.WorksheetFunction.CountA(r.Rows(i)) == 0:
67     if emptyRowBeg:
68     pass
69     else:
70     emptyRowBeg = i
71     else:
72     if emptyRowBeg:
73     emptyList.append(("%s,%s")%(emptyRowBeg,i-1))
74     emptyRowBeg = False
75     for x in emptyList:
76     beg,end = x.split(",")
77     ws.Rows("%d:%d"%(int(beg),int(end))).EntireRow.Hidden = True
78    
79    
80     for i in range(1,rows+1):
81     if excel.WorksheetFunction.CountA(r.Rows(i)) == 0:
82     if emptyRowBeg:
83     pass
84     else:
85     emptyRowBeg = i
86     else:
87     if emptyRowBeg:
88     emptyList.append(("%s,%s")%(emptyRowBeg,i-1))
89     emptyRowBeg = False
90     for x in emptyList:
91     beg,end = x.split(",")
92     ws.Rows("%d:%d"%(int(beg),int(end))).EntireRow.Hidden = True
93    
94     print "Sheet processed."
95     print "Saving..."
96     pth,ext = filePathAndName
97     ## ALWAYS SAVE THE WORKBOOK AND NOT JUST THE SHEET. WB NOT WS
98     wb.SaveAs(pth + "Fixed"+ext)
99     wb.Close()
100     print "Saved and closed."