B t `¤&ã@sLdZddlZddlmZddlmZmZmZddl m Z Gdd„de ƒZ dS)z4 A class for interacting with an Excel spreadsheet. éN)Ú DispatchEx)Ú CoInitializeÚCoUninitializeÚ com_error)ÚExcelSpreadsheet_basec@seZdZdZdZdZdZdZdZdZ dZ dZ dd „Z d d „Z d d „Zd8dd„Zd9dd„Zdd„Zdd„Zdd„Zdd„Zd:dd„Zd;dd„Zdd „Zdd&d'„Zd?d(d)„Zd@d*d+„Zd,d-„ZdAd.d/„ZdBd0d1„ZdCd2d3„Z d4d5„Z!d6d7„Z"dS)DÚExcelSpreadsheet_win32comééééé NrcCsdS)NT©)Úselfr r úG/tmp/pip-unpacked-wheel-cqckmaqz/pyutilib/excel/spreadsheet_win32com.pyÚcan_read.sz"ExcelSpreadsheet_win32com.can_readcCsdS)NTr )rr r rÚ can_write1sz#ExcelSpreadsheet_win32com.can_writecCsdS)NTr )rr r rÚ can_calculate4sz'ExcelSpreadsheet_win32com.can_calculate©rcCs&d|_d|_|dk r"| |||¡dS)z Constructor. N)ÚxlÚxlsfileÚopen)rÚfilenameÚ worksheetsÚdefault_worksheetr r rÚ__init__7sz"ExcelSpreadsheet_win32com.__init__cCs®|ddkr||_nt ¡d||_y| ¡|_Wntk rPtdƒ‚YnX|jj |j¡|_ t |ƒ|_ i|_ x.|D]&}|j j  |¡|j |<|j | ¡qzW||_dS)z5 Initialize this object from a file. rú:ú\zExcel not installed.N)rÚosÚgetcwdÚ_excel_dispatchrrÚIOErrorZ WorkbooksZOpenÚwbÚsetrÚ_wsÚ WorksheetsÚItemÚActivater)rrrrÚwsidr r rr@s   zExcelSpreadsheet_win32com.opencCs |j|jS)z The active worksheet )r#r)rr r rÚwsZszExcelSpreadsheet_win32com.wscCs | ¡dS)zB Close the spreadsheet when deleting this object. N)Úclose)rr r rÚ__del__^sz!ExcelSpreadsheet_win32com.__del__cCsN|dkr dS||jkrD|j |¡|jj |¡|j|<|j| ¡||_dS)z Activate a specific sheet N)r#rÚaddr!r$r%r&r)rÚnamer r rÚactivateds  z"ExcelSpreadsheet_win32com.activatecCsB|dkr dS|jdkrdS|jjdk r6|jjjdd| ¡dS)z' Close the spreadsheet Nr)Z SaveChanges)rZActiveWorkbookÚCloseÚ _excel_quit)rr r rr)ns  zExcelSpreadsheet_win32com.closecCs0|dkr|jjSt|ƒtk r$tdƒ‚||j_dS)Nz=ExcelSpreadsheet calc_iterations can only be set to a boolean)rZ IterationÚtypeÚboolÚ ValueError)rÚvalr r rÚcalc_iterationszs  z)ExcelSpreadsheet_win32com.calc_iterationscCs>|dkr|jjSt|ƒtttgks*|dkr2tdƒ‚||j_dS)NrzFExcelSpreadsheet max_iterations can only be set to nonnegative integer)rZ MaxIterationsr0ÚintÚfloatÚlongr2)rr3r r rÚmax_iterations‚s z(ExcelSpreadsheet_win32com.max_iterationscCs|j ¡dS)z7 Perform calculations in a spreadsheet N)rZ Calculate)rr r rÚ calculateŠsz#ExcelSpreadsheet_win32com.calculatecCsF| |¡t|ƒ}| | ¡ ||¡| ¡ ||d|d¡f|¡S)Nr)r-ÚlenÚ set_ranger(ÚCells)rÚrowÚcolr3r'Únrowsr r rÚ set_arrays z#ExcelSpreadsheet_win32com.set_arrayFcCs*| | ¡ ||¡| ¡ ||¡f||¡S)N)Ú get_ranger(r<)rr=r>Zrow2Zcol2r'Úrawr r rÚ get_array–sz#ExcelSpreadsheet_win32com.get_arraycCsî| |¡t|ƒttfkr"|ff}t|ƒ| |¡krZtdtt|ƒƒdt| |¡ƒƒ‚t|ƒtkrl|}nrt|ƒttt fkrÞg}xR|D]J}t|ƒtkr¤|  |¡qˆt|ƒttt fkrÄ|  |f¡qˆ|  t|ƒ¡qˆWt|ƒ}||  |¡_ dS)zC Set a range with a given value (or set of values) zSetting data with z rows but range has N) r-r0r5r6r:Úget_range_nrowsr ÚstrÚtupler1ÚappendÚ_rangeÚValue)rÚ rangenamer3r'ÚdataÚitemr r rr;šs&     z#ExcelSpreadsheet_win32com.set_rangec Csš| |¡|d}| |¡dkr8| ¡ |¡ |j¡}n| ¡ |¡}|rd| ¡ || |j¡¡}n&| ¡ || ¡ |d¡ |j¡¡}| ||¡}|S)a  Select the values of a column. This ignores blank cells at the top and bottom of the column. If contiguous is False, a list is returned with all cell values starting from the first non-blank cell until the last non-blank cell. If contiguous if True, a list is returned with all cell values starting from the first non-blank cell until the first blank cell. Ú1NZ65536)r-rAr(ÚRangeZEndÚxlDownÚxlUpÚ_get_range_data) rZcolnamer'rBÚ contiguousr,ÚstartÚrangeÚtmpr r rÚ get_column³s  z$ExcelSpreadsheet_win32com.get_columncCs | |¡| |¡}| ||¡S)z2 Get values for a specified range )r-rHrQ)rrJr'rBrTr r rrAÌs  z#ExcelSpreadsheet_win32com.get_rangecCs||r |jS|jj}|jj}|jjdkr`|dkr4|jSg}x|jD]}| |d¡q@Wt|ƒSn|dkrr|jdS|jSdS)Nrr)rIÚRowsÚCountÚColumnsrGrF)rrTrBr?ZncolsZansr3r r rrQÔs    z)ExcelSpreadsheet_win32com._get_range_datacCs| |¡| |¡jjS)z= Get the number of rows in a specified range )r-rHrWrX)rrJr'r r rrDôs z)ExcelSpreadsheet_win32com.get_range_nrowscCs| |¡| |¡jjS)z@ Get the number of columns in a specified range )r-rHrYrX)rrJr'r r rÚget_range_ncolumnsûs z,ExcelSpreadsheet_win32com.get_range_ncolumnscCsd| |¡y,t|ƒtkr&| ¡j|ŽS| ¡ |¡SWn(tk r^tdt|ƒdƒ‚YnXdS)z6 Return a range for a given worksheet zUnknown range name `ú'N)r-r0rFr(rNrr rE)rZrangeidr'r r rrHs  z ExcelSpreadsheet_win32com._rangecCs(tjdkrtdƒt_tjd7_tjS)z˜ A private method that launches Excel. This keeps a counter of the number of ExcelSpreadsheet objects that are running. rzExcel.Applicationr)rÚ_excel_app_ctrÚDispatchÚ_excel_app_ptr)rr r rrs  z)ExcelSpreadsheet_win32com._excel_dispatchcCsDtjdkrdStjdkr,tjd8_tjSdt_tj ¡t`dS)zS A method that quits from Excel after all spreadsheets are closed. rNr)rr\r^ZQuit)rr r rr/$s   z%ExcelSpreadsheet_win32com._excel_quit)Nrr)rr)N)N)N)NF)N)NFF)NF)N)N)N)#Ú__name__Ú __module__Ú __qualname__ZxlToLeftZ xlToRightrPrOZxlThickZxlThinZ xlEdgeBottomr^r\rrrrrr(r*r-r)r4r8r9r@rCr;rVrArQrDrZrHrr/r r r rr!s@             r) Ú__doc__rZwin32com.clientrr]Z pythoncomrrrZpyutilib.excel.baserrr r r rÚ s