Hi,
I am very much a novice using mata, and i am trying to write a small piece of mata to change rowheights of an excel file.
My final command looks like this:
I have a chunk of Stata code to parse
It consists of a small bit of .ado and small piece of .mata
However, the mata is really inefficent as it open and closes everything each time.
Ideally i would like function to open the workbook, another to make edits, and a final one to close it.
But alas, i have no idea how to split the function apart and still allow it to work.
My Mata code,
My attempt it splitting it apart into three functions
I am very much a novice using mata, and i am trying to write a small piece of mata to change rowheights of an excel file.
My final command looks like this:
Code:
excelrowht, file("mytestexport.xlsx") sheet( "Sheet1") linehtlist("1 / 10 " "11/20 @35" "21,30 @50" "31/40 @65" )
It consists of a small bit of .ado and small piece of .mata
However, the mata is really inefficent as it open and closes everything each time.
Ideally i would like function to open the workbook, another to make edits, and a final one to close it.
But alas, i have no idea how to split the function apart and still allow it to work.
Code:
cap prog drop excelrowht prog define excelrowht syntax, linehtlist(string asis) file(string asis) sheet(string asis) foreach group in `linehtlist' { if strpos("`group'" ,",")>0 { tokenize "`group'" , parse("@," ) local ls `1' local le `3' local ht `5' di "`ls' `le' `ht'" mata: excelrowht(`file', `sheet', `ls' , `ht', `le') } // end if else { tokenize "`group'" , parse("@") local linelist `1' local ht `3' foreach ls of numlist `linelist' { di "`ls' `ht'" mata: excelrowht(`file', `sheet', `ls' , `ht') } // end foreach } // end else } // end group end
Code:
mata void excelrowht( string scalar file , /// string scalar sheet , /// real vector rowstart , /// | real scalar rowht , /// real scalar rowend) { if (rowht==.) rowht =30 if (rowend==.) rowend=rowstart printf("excelrowht( %s, %s, %f , %f, %f )",file,sheet,rowstart,rowend,rowht) class xl scalar b b =xl() b.load_book(file) b.set_mode("open") b.set_sheet(sheet) b.set_keep_cell_format("on") for (i=1; i<=length(rowstart); i++) { b.set_row_height(rowstart[i],rowend[i],rowht) } b.close_book() } end
Code:
mata void excelrowhtopen( string scalar file , /// string scalar sheet /// ) { printf("excelrowht( %s, %s, )",file,sheet) class xl scalar b b =xl() b.load_book(file) b.set_mode("open") b.set_sheet(sheet) } void excelrowhtput( real scalar rowstart , /// | real scalar rowht , /// real scalar rowend) { class xl scalar b b =xl() if (rowht==.) rowht =30 if (rowend==.) rowend=rowstart printf("excelrowht( %f , %f, %f )",rowstart,rowend,rowht) for (i=1; i<=length(rowstart); i++) { b.set_row_height(rowstart[i],rowend[i],rowht) } } void excelrowhtclose( ) { b.close_book() } end