yzms/show/include/getxlsx.php

304 lines
20 KiB
PHP

<?
ini_set("display_errors", "off");
function xlsx_filter_chr($s, $conv = false) {
if($conv) {
$s = iconv("gbk", "utf-8//ignore", $s);
}
if(strlen($s) > 30000) $s = substr($s, 0, 30000);
$s2 = '';
$len = strlen($s);
for($i = 0; $i < $len; $i++) {
$n = ord($s[$i]);
if($n == 9 || $n == 10 || $n == 13 || ($n >= 32 && $n <= 126)) {
$s2 .= $s[$i];
} else if($n >= 0xE0 && $n <= 0xEF) {
if($i+2 < $len) {
$t1 = ord($s[$i+1]);
$t2 = ord($s[$i+2]);
if($t1 >= 128 && $t1 <= 191 && $t2 >= 128 && $t2 <= 191) {
$s2 .= $s[$i].$s[$i+1].$s[$i+2];
$i += 2;
}
}
}
}
return htmlspecialchars($s2);
}
//function getXlsx($titles, $widths, $list, $fn) {
function getXlsxByList($titles, $widths, $list, $fn, $conv = false) {
$sheets = array(array(
'titles' => $titles,
'widths' => $widths,
'list' => $list,
'sheet_name' => 'Sheet1',
));
return getXlsx($sheets, $fn, $conv);
}
function getXlsxBySQL($titles, $widths, $sql, $fn, $conv = false) {
$sheets = array(array(
'titles' => $titles,
'widths' => $widths,
'sql' => $sql,
'sheet_name' => 'Sheet1',
));
return getXlsx($sheets, $fn, $conv);
}
function getXlsx($sheets, $fn, $conv = false) {
if($sheets['list'] || $sheets['listfunc'] || $sheets['sql']) $sheets = array($sheets);
$xlschars = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ',
'BA','BB','BC','BD','BE','BF','BG','BH','BI','BJ','BK','BL','BM','BN','BO','BP','BQ','BR','BS','BT','BU','BV','BW','BX','BY','BZ',
'CA','CB','CC','CD','CE','CF','CG','CH','CI','CJ','CK','CL','CM','CN','CO','CP','CQ','CR','CS','CT','CU','CV','CW','CX','CY','CZ',
'DA','DB','DC','DD','DE','DF','DG','DH','DI','DJ','DK','DL','DM','DN','DO','DP','DQ','DR','DS','DT','DU','DV','DW','DX','DY','DZ'
);
$xmlstr_1 = '<?xml version="1.0" encoding="utf-8"?>'."\n".'<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" mc:Ignorable="x14ac"><sheetViews><sheetView tabSelected="1" workbookViewId="0"><selection sqref="A1:A1"/></sheetView></sheetViews><sheetFormatPr defaultRowHeight="13.5" x14ac:dyDescent="0.15"/><cols>';
$xmlstr_2 = '</sheetData><phoneticPr fontId="1" type="noConversion"/><pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/><pageSetup paperSize="9" orientation="portrait" r:id="rId1"/></worksheet>';
$xmlstr_3 = '<?xml version="1.0" encoding="utf-8"?>'."\n".'<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"';
$xmlstr_5 = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'."\n".'<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x15" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"><fileVersion appName="xl" lastEdited="6" lowestEdited="6" rupBuild="14420"/><workbookPr defaultThemeVersion="153222"/><mc:AlternateContent xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"><mc:Choice Requires="x15"><x15ac:absPath url="C:\" xmlns:x15ac="http://schemas.microsoft.com/office/spreadsheetml/2010/11/ac"/></mc:Choice></mc:AlternateContent><bookViews><workbookView xWindow="0" yWindow="0" windowWidth="28800" windowHeight="12450"/></bookViews><sheets>';
$xmlstr_6 = '</sheets><calcPr calcId="152511"/><extLst><ext uri="{140A7094-0E35-4892-8432-C4D2E57EDEB5}" xmlns:x15="http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"><x15:workbookPr chartTrackingRefBase="1"/></ext></extLst></workbook>';
$xmlstr_7 = '<?xml version="1.0" encoding="utf-8"?>'."\n".'<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings" Target="sharedStrings.xml"/>';
$sourceZip = "UEsDBAoAAAAAANWJUU0AAAAAAAAAAAAAAAAJAAAAZG9jUHJvcHMvUEsDBBQAAAAIAAAAIQCFVevYjAEAABADAAAQAAAAZG9jUHJvcHMvYXBwLnhtbJ1SQW7bMBC8F8gfBN5jSklbFAbFoHBS5NCiBuzkvqVWFhGKJMiNYPctvfRQoD/oqb9JgT6jlAwrcpJTb7Ozg9FoluJi25qswxC1syUrZjnL0CpXabsp2c36w+k7lkUCW4FxFku2w8gu5MkrsQzOYyCNMUsWNpasIfJzzqNqsIU4S2ubNrULLVAaw4a7utYKL526b9ESP8vztxy3hLbC6tSPhmzvOO/of00rp/p88Xa988lPivfeG62A0l/KT1oFF11N2dVWoRF8uhTJaIXqPmjayVzw6ShWCgwukrGswUQU/JEQ1wh9aUvQIUrR0bxDRS5kUX9NtZ2x7AtE7OOUrIOgwRLby/bDgI2PFOSfXz8efn/7+/2n4CM3wKl0ivVrWQyCBI6FfMyR8HHCtSaD8XO9hEAvBC6mgYcMbBJx1SBS8Szf4UtPvBeu9WBTf3xEH7W9izd+7S6B8NDmMSlWDQSs0gHGtkdCXKdcwfT6RQN2g9VB83zR3/52/8Bl8WaWn+f5cPIDJ/jjU5b/AFBLAwQUAAAACAAAACEATtETSTEBAABXAgAAEQAAAGRvY1Byb3BzL2NvcmUueG1sjZJRS8MwFIXfBf9DyXubZB06Q9uByp4cCE4mvoXkrgs2aUiiXf+9bbd1G+7Bx5tz7nfPvSSb73QV/YDzqjY5oglBERhRS2XKHL2vFvEMRT5wI3lVG8hRCx7Ni9ubTFgmagevrrbgggIfdSTjmbA52oZgGcZebEFzn3QO04mb2mkeutKV2HLxxUvAE0LusIbAJQ8c98DYjkR0QEoxIu23qwaAFBgq0GCCxzSh+OQN4LS/2jAoZ06tQmvhqvUoju6dV6OxaZqkSQdrl5/ij+XL27BqrEx/KwGoyKRgwgEPtSvKdpvhs7q/XcV9WHZn3iiQj+3e8vc5O6yzbwUZdTHYPvRRWadPz6sFKiaEzmJKYnq/Ig+MEDZNP/upF/0noD4M+TeRTll6TjwCiiH35VcofgFQSwMECgAAAAAA74lRTQAAAAAAAAAAAAAAAAMAAAB4bC9QSwMECgAAAAAA1YlRTQAAAAAAAAAAAAAAABMAAAB4bC9wcmludGVyU2V0dGluZ3MvUEsDBBQAAAAIAAAAIQA+m4sQzwcAABAhAAAnAAAAeGwvcHJpbnRlclNldHRpbmdzL3ByaW50ZXJTZXR0aW5nczEuYmlu7VZ/jBx1Ff/egYWeQFtbUwk2Xo6CWm25vd4tbfS87O7M3u6yszM3M3tXDLiZm/ne7tzNzHeYH3e3kNSWH+FESTSVEFuKUWqK1hYkHFKwqC0aSkIQriYttjQWKrXJ2SInRWpT33dmd++4K9VEI/6x73I7833vfd973/c+730nhQTUjLJIQS7CyEEZ+PWAI8A7gSeH2lAriqCVlbe2QJaAHc2IUsOlaN5h1N6cOL/hsgY0H23+ePvlGmpAC9C6xkZ4rmu8BLRiqB3996hhxrMR/hfDy3mg2XpMOpdvQQubslecWLxk61VDF7PZcxE/8+ZwwveGWZyZOg0X5fwraqj81el/STPzvbAJIYmTM8E7Qk2p/6BPomAjbdm+F9ctlORFTuLzYoJFIisx2SzKW7qDXfqWEhii5tNSPo1kx8eIlQQxLUu+bRPHw1rITAlCgpg2cXUP56V4N/Yk7OiKkfPNfuygkm1rw7e1RlZphlEoYo/Bw7qKZ6r0URNpy/UUw5B1EyeINaAXP2SjIHCMbxt4tLJvpuukbuB/w98FjSERu8TwPZ1YKNraqtk6SiquB9zwlKEeyvE5FvGOji1PCXQFXpTFWFqGWEK2SECCI2taYb/hYiQoNnYk/XaMYu2Iw5quyGUbFnmZRyyXlGxCDN0qDhBHyEojhCO2DtEEPhPEMMAW4pNJMF/bKzsYoscjArF9u6ZJHI5oGLW199s2YlViEZOuwyBkPOrF3LihqENVjgxr3TMV25Ww50EEwKIWeN+DeDDKCGw3ayn9kNKY7xEIIFx1O8qA7tG0A0hcmoIKCkR8m49dj+8fxKonK0XGN+2Ks5ow5xuG5Dm6DftNxdJq8lS539E1EVsaJGtE99RSjRl4Fxzd8np8xdC9crdD4NxCT/AstIUoFRxi0xL6jooZxVMAB2rJiEQ7VqlKP6hMZ4jjc3wiJfIcW+B4hqUgYrJBTeBZEBLZKGVlsqylEo3mJS8n1wArQ/pjqkp8K0gWrPl4LJGQC8EzJxe6RT4v5GIctRgnjsVbDC0eLHgm3B4vww8/jB04FSQ4nuGBv47LUtzmXegniNlsa41EV42aBoiyti5hA7JJswyIMgCU1TLU0lwMSlctARh3saQqVhZq6CaJU8FtMpaV2NpmQSli2mlOLf8hv1Yet2ox5LMDA7pKwc0BrGbZSptgDLKvUjRYRUHxSjUNqq6WHGLioH4U12KeChK01UmfA31bkVCAwNjRqhocNolT5hQLrDvVaGC2zACeSDuwVzFAFLkRccpoEHoK68WSh6LtoX687OGYoRctrAWqkJI+XYMY2zqioQaDDU8RyUhKMQZkYuGKRRqDYgHiwgwyMD5IMe1h00V0Vjl+UJY0U2iNFJKxBMvwfbmVOV7k5ZgcgKra9+F+GGqwSYGzuohdxybycrqXndnVc9VSbKz35mDGZaOC4royZNIvlqrJkEzF8cJdEiQ+rCoA7AJyXtNmCcOjJTHWZg6z6jnoMPO98IL4EPnc3NDmMlDwC/WZpULd8w40N2KHsUVXblJ3XC9Qs6ejkYnsKOXIB8OcNhEOV8Q4OgC9soAEUQjxVpx4JQk6yw13GeUaunPQXYw+MBC4pHYSJQLjv4o1ymFHVWzTQ7rBLQIQFViYHnOkWTLCwty6MLsXzjdbkqboHlDAm1QiIx+UzVGGQQ4HA3xhJ0g4yGlLua43s/aCFCDahLpUg81KYbBB0VN+f6FyScOM9WAn9KlbIiQc8+Gha5rQuxqA2QyS5s4RJ0pYHYLbSQty7tsa5LyiJUhwrdJ71C2E9yl4o34NHbsS1Mafo8fb4aVZY8AlYZYr3Gmn0GHYK0jQXG3R1YU4PDsi7YVUsO6oTR4x1le9Pat4oe3jw1xL+K5HzKAFax8pDo5ZilF29enhprjl4F5APPXOpeCbJ6eYVJRMV6pfYNJxyaMXUkEGlMlwiSFGd6l/7aP5KgzpxGL4hssLqRb4Shx9aPLQy6suiX36stOnBlue37it+8Hk3vsZcf4Kzdy+s7k3LdsL72va/GjiyGt3jfWdvnTvTVMnGm75Tf7LGze9z5lDE13v3vnq+q4th763tevZTcZft0xOHVpw9wPLrtmw8Ymr0t/v2/ByPvrmwZXj768451ktl99w5Om/zB9uYJd2PjfhbrvxkRXkTe7hH7+DovadT25b/tRzf/z71C9Pn1s8fsOerx7K7f7FwJKmezLrT+xYNjE5dWSnvv+l0c7HXnnmwKNfe+z+np9e+ydfHVSk0f1Hn9++pfPKwbXJu5yOZffeft2ZL209fPyH76yc3DXy82f/fGr91rGxsRdP7uw67mufeWvNe5PzFy3quXLPmR+88bcW8eCvP//qC6nX9l3dKLyQufUT3S89vHzRKwsmzt9xsnPhA48f2DuW+dz219+7R95z9Nj4efE7m/bt7v7UpoN333rfsbPO67/9GfP2GPPutd84drW+Y+nxB5cf/cLvP/uje88OLlHFR7694bq3Pvat77548pv7f3f0V4WbJyffOLfgpi8+vrnzky2Dz6z9w5N73x4/nTlwy3j2jl1d3tLdV3xlxz/2TTz99bXthdXN/rnRyNRPds0rXG+dfeLMU53XrM4f3uUOtVSIP7VkeHDPRwmhOtWpTnWqU53qVKc61alOdapTnepUpzr9H9A/AVBLAwQUAAAACAAAACEA/TUTxw8DAAC8CAAADQAAAHhsL3N0eWxlcy54bWy9Vr1u2zAQ3gv0HQTtCiVZcmxDVhDHERAgLQokBboVtETZRPgjUHRqp+jWrWMfolvnLH2bFuhj9CgqttygzR/axeQdj9/38XhHOTlYceZcElVTKcZusOe7DhG5LKiYj93X55k3cJ1aY1FgJgUZu2tSuwfp82dJrdeMnC0I0Q5AiHrsLrSuRgjV+YJwXO/JighYKaXiWIOp5qiuFMFFbTZxhkLf7yOOqXAtwojn9wHhWF0sKy+XvMKaziijet1guQ7PRydzIRWeMZC6CiKc32A3xi14TnMla1nqPYBDsixpTm6rHKIhAqQ0EUuecV07uVwKDdnauBw7nBTg3AchVu+RLECGv+f7bx0XpQlq96dJKcUWpgcajbrRhZDvRGaWLLaJSpP6yrnEDDyBwcglk8rRIJ+YIPAIzImN+PH10/dvn42vxJyytfWGzbYFVjVclUXqRcbXJKHdyimkrdFoSXeph/+YZ4aefszeY+ibwdwHZWxzH6FrHWkCBaaJEhkYTjs/X1egSEAvWJgm7o7oucLrIIw7G5oBeGdSFdB73YKyrjRhpNSwQdH5woxaVsgsag2FmiYFxXMpMDOQNzvaCcDmhLEz059vyh3sVdkpVN+UqdhMQVA7tTDWSBPM6FxwIrR5JTTNTRpzMInN46qEny6fZe8QR48idlblAxT8CT+8G9/BVcXWputMjqx1eMNo07YVsJCKXkFoR8I9RUXDB53a6ni55DOisuYx+V3K/Wjb1+h/8KL23jvlt1N8G69jWhna+Pr655ePHerZkjJNhbVQt6wAs1htK6pZ1eaR32UBjIKUeMn0+WZx7G7nL0hBlzzcRL2il1K3Udv5qem4oG84yEqf1roZnaWiY/f98WR/OD3OQm/gTwZe1COxN4wnUy+OjibTaTb0Q//oQ+eb84QvTvNlhOsMolHNIEq1h23Fn219Y7djWPlN/kB2V/sw7PuHceB7Wc8PvKiPB96g34u9LA7CaT+aHMdZ3NEeP0574KMg2IqPR5pywqggu/LPu164JDD/cgh0cxNo+7cj/QVQSwMECgAAAAAA1YlRTQAAAAAAAAAAAAAAAAkAAAB4bC90aGVtZS9QSwMEFAAAAAgAAAAhAHeLfZb2BQAAjxoAABMAAAB4bC90aGVtZS90aGVtZTEueG1s7Vlbixs3FH4v9D+IeXfmPmMv8QZ7bCdtdpOQ3aTkUR7LHmU1IzOSd9eEQEkeC4XStOSlUPrSh9I2kEALTX9N0pQ0hfyFajS+aGw5l2YDKY0N9ujoO0efzjk60sycPnOcEnCIcoZp1jTsU5YBUBbTAc5GTePKfq9WNwDjMBtAQjPUNKaIGWe2P/zgNNziCUoREPoZ24JNI+F8vGWaLBZiyE7RMcpE35DmKeSimY/MQQ6PhN2UmI5lBWYKcWaADKbC7MXhEMcIPP71t6ff3TW259a7RPxknBWCmOR7sRxSVZHYwYFd/LEpi0gODiFpGmKgAT3aR8fcAAQyLjqahiU/hrl92lwoEb5BV9Hryc9Mb6YwOHCkXj7qLxQ9z/eC1sK+U9pfx3XDbtANFvYkAMaxmKm9hvXbjXbHn2EVUHmpsd0JO65dwSv23TV8yy++Fby7xHtr+F4vWvpQAZWXvsYnoRN5Fby/xAdr+NBqdbywgpeghODsYA1t+YEbzWe7gAwpOaeFN3yvFzoz+BJlKtlV6md8U66l8DrNewIggws5zgCfjtEQxgIXQYL7OQY7eJSIxBvDjDIhthyrZ7nit/h68kp6BG4hqGiXopitiQo+gMU5HvOm8bGwaiiQ5w9/fP7wPnj+8N6jWw8e3frl0e3bj279rFE8B7ORqvjs+y/+/uZT8Nf9b5/d+UqPZyr+j58+e/z7l3ogV4FPvr7354N7T+5+/vSHOxp4K4d9Fb6PU8TABXQELtNUzE0zAOrnr6exn0Bc0YCJQGqAXZ5UgBemkOhwbVR13tVcFAkd8OzkeoXrXpJPONYAzydpBbhLKWnTXDud88VY6nQm2Ug/eD5RcZchPNSNHa2EtjsZi2zHOpNRgio0LxERbThCGeKg6KMHCGnUrmFc8esujnPK6JCDaxi0Ida6ZB/3uV7pHE5FXKY6giLUFd/sXgVtSnTmO+iwihQLAhKdSUQqbjwLJxymWsYwJSpyB/JER3JvmscVhzMuIj1ChILuADGm07mYTyt0z4viog/7LpmmVWTO8YEOuQMpVZEdehAlMB1rOeMsUbEfsQORohBcolxLglZXSNEWcYDZxnBfxYi/3rK+IuqqPkGKnkmuWxKIVtfjlAwhymZ7QKWapzh7aWlfKer++6KuL+qtHGuX1mop34T7DxbwDpxkl5BYM+/r9/v6/X+s35vW8slX7WWhNtXTujSTbjy6DzEhe3xK0A6TJZ6J6Q16QigbUmlxpzBOxOVsuApulEN5DXLKP8E82UvgWAxjyxFGbGZ6xMCYMrFJGBtty01mku7SQSm17fnNqVCAfCkXm8xcLrYkXkqDcHkXtjAvWyOmEvCl0VcnoQxWJeFqSITuq5GwrZNi0dCwqNsvYmEqURHrD8DiwYbvlYxEvkGCBkWcSv15dE880pucWZ22o5lewzuxSFdIKOlWJaGkYQIHaFV8wrFuNPShdrQ0wvrbiLW5XhtIVm2BI7HmXF+YieG4aQzF8VBcpmNhjxV1E5JR1jRiPnP0v6ks45zxDmRJCZNd5fxTzFEOCE5FrqthINmSm+2E1rtLrmG9e54zV4OMhkMU8w2SZVP0lUa0vW8ILhp0IkjvJYMj0CeT/DIUjvJDu3DgADO+8OYA50pyL724Uq5mS7Hy0Gy5RCEZJ3C2o6jFvITL6wUdZR6S6eqsTJ0L+6PeSey6L1daKZobNpBwYxV7e5u8wsrVs/K1ta5Rt168S7z5hqBQq+upuXpqm/aOEzwQKMMFG/zmbIzmG+4Gq1lrKudK2Vp7O0H710Xmd8RxdUI4Kx8DHIt7hGj+XLmsBFI6ry7HHExy3DRuWH7Lixw/qll1v1vzXM+q1f2WW2v5vmt3fdvqtJ2bwik8SW2/HLsn7mfIdPb2RcrX3sCk82P2qZimJpXnYFMqyzcwtqN7A7Nf9BsAC8/cCJxew220g1rDbfVqXqddrzWioF3rBFHY6XUiv97o3TTAoQR7LTfygm69FthRVPMCq6Bfb9RCz3FaXtiqd73WzZmvxczn/3P3Sl7b/wBQSwMECgAAAAAA8IlRTQAAAAAAAAAAAAAAAA4AAAB4bC93b3Jrc2hlZXRzL1BLAwQKAAAAAADViVFNAAAAAAAAAAAAAAAAFAAAAHhsL3dvcmtzaGVldHMvX3JlbHMvUEsDBBQAAAAIAAAAIQA7bTJLuwAAAEIBAAAjAAAAeGwvd29ya3NoZWV0cy9fcmVscy9zaGVldDEueG1sLnJlbHONz8GKwjAQBuD7gu8Q5m7SepBlaepFBK/qPkBMp22wnYTMKPr25rjKHjz+/Mw3/M3mPk/qhplDJAu1rkAh+dgFGiz8nnbLb1Asjjo3RUILD2TYtIuv5oCTk3LEY0isikJsYRRJP8awH3F2rGNCKk0f8+ykxDyY5PzFDWhWVbU2+a8B7Yup9p2FvO9qUKdHwk/s2PfB4zb664wk/7wwKQcSzEcUKQO50C4PKBa0fu/ec63PgcC0jXlZ3j4BUEsDBAoAAAAAANWJUU0AAAAAAAAAAAAAAAAJAAAAeGwvX3JlbHMvUEsDBBQAAAAIAAAAIQBBN4LPXQEAAAQFAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbK1UzW7CMAy+T9o7VLmiNrDDNE0UDvs5bkiwBwiNSyPSJIoNg7efWxiaJqBCcGnU+vtzEnc43tQ2WUNE410uBllfJOAKr41b5OJr9p4+iQRJOa2sd5CLLaAYj+7vhrNtAEyY7TAXFVF4lhKLCmqFmQ/guFL6WCvi17iQQRVLtQD50O8/ysI7AkcpNRpiNHyFUq0sJW8b/rxLMjdOJC87XGOVCxWCNYUiLsu10/9MUl+WpgDti1XNlAxDBKWxAqDaZiEaVopTIOLGUMijnhEsXma67ypjZovBygTsMeCEQ1M5bbDnffJxRKMhmahIH6pmlNxY+e3jcu79MjsvcunWtGtWK+N63f4tGGW7DG4c5KDfkYP4jsHueX2EVqbDEGlrAW+97a1ol3OlIugpxebS3vzc/2ify8H8SfQBeWojXB7id0QadhpYCCKZ850fHFn66q6hmT4N+oi3bP9hox9QSwMECgAAAAAA1YlRTQAAAAAAAAAAAAAAAAYAAABfcmVscy9QSwMEFAAAAAgAAAAhALVVMCPrAAAATAIAAAsAAABfcmVscy8ucmVsc62SzWrDMAyA74O9g9G9UdrBGKNOL2PQ2xjZA2i28kMSy9hul779vMPYAl3pYUfL0qdPQtvdPI3qyCH24jSsixIUOyO2d62Gt/p59QAqJnKWRnGs4cQRdtXtzfaVR0q5KHa9jypTXNTQpeQfEaPpeKJYiGeXfxoJE6X8DC16MgO1jJuyvMfwmwHVgqn2VkPY2ztQ9cnzNWxpmt7wk5jDxC6daYE8J3aW7cqHXB9Sn6dRNYWWkwYr5iWHI5L3RUYDnjfaXG/097Q4cSJLidBI4Ms+XxmXhNb/uaJlxo/NPOKHhOFdZPh2wcUNVJ9QSwECFAAKAAAAAADViVFNAAAAAAAAAAAAAAAACQAAAAAAAAAAABAAAAAAAAAAZG9jUHJvcHMvUEsBAhQAFAAAAAgAAAAhAIVV69iMAQAAEAMAABAAAAAAAAAAAQCAAAAAJwAAAGRvY1Byb3BzL2FwcC54bWxQSwECFAAUAAAACAAAACEATtETSTEBAABXAgAAEQAAAAAAAAABAIAAAADhAQAAZG9jUHJvcHMvY29yZS54bWxQSwECFAAKAAAAAADviVFNAAAAAAAAAAAAAAAAAwAAAAAAAAAAABAAAABBAwAAeGwvUEsBAhQACgAAAAAA1YlRTQAAAAAAAAAAAAAAABMAAAAAAAAAAAAQAAAAYgMAAHhsL3ByaW50ZXJTZXR0aW5ncy9QSwECFAAUAAAACAAAACEAPpuLEM8HAAAQIQAAJwAAAAAAAAAAAIAAAACTAwAAeGwvcHJpbnRlclNldHRpbmdzL3ByaW50ZXJTZXR0aW5nczEuYmluUEsBAhQAFAAAAAgAAAAhAP01E8cPAwAAvAgAAA0AAAAAAAAAAQCAAAAApwsAAHhsL3N0eWxlcy54bWxQSwECFAAKAAAAAADViVFNAAAAAAAAAAAAAAAACQAAAAAAAAAAABAAAADhDgAAeGwvdGhlbWUvUEsBAhQAFAAAAAgAAAAhAHeLfZb2BQAAjxoAABMAAAAAAAAAAQCAAAAACA8AAHhsL3RoZW1lL3RoZW1lMS54bWxQSwECFAAKAAAAAADwiVFNAAAAAAAAAAAAAAAADgAAAAAAAAAAABAAAAAvFQAAeGwvd29ya3NoZWV0cy9QSwECFAAKAAAAAADViVFNAAAAAAAAAAAAAAAAFAAAAAAAAAAAABAAAABbFQAAeGwvd29ya3NoZWV0cy9fcmVscy9QSwECFAAUAAAACAAAACEAO20yS7sAAABCAQAAIwAAAAAAAAABAIAAAACNFQAAeGwvd29ya3NoZWV0cy9fcmVscy9zaGVldDEueG1sLnJlbHNQSwECFAAKAAAAAADViVFNAAAAAAAAAAAAAAAACQAAAAAAAAAAABAAAACJFgAAeGwvX3JlbHMvUEsBAhQAFAAAAAgAAAAhAEE3gs9dAQAABAUAABMAAAAAAAAAAQCAAAAAsBYAAFtDb250ZW50X1R5cGVzXS54bWxQSwECFAAKAAAAAADViVFNAAAAAAAAAAAAAAAABgAAAAAAAAAAABAAAAA+GAAAX3JlbHMvUEsBAhQAFAAAAAgAAAAhALVVMCPrAAAATAIAAAsAAAAAAAAAAQCAAAAAYhgAAF9yZWxzLy5yZWxzUEsFBgAAAAAQABAA4gMAAHYZAAAAAA==";
if(strtolower(substr($fn, -5)) != '.xlsx') {
return false;
}
if(substr($fn, 0, 1) != '/' && !preg_match("/^[A-Za-z]\:/", $fn)) {
$fn = getcwd()."/".$fn;
}
if(file_exists($fn)) {
@unlink($fn);
if(file_exists($fn)) return false;
}
$root = dirname($fn);
$dir = opendir($root);
while($t_fn = readdir($dir)) {
if($t_fn == '.' || $t_fn == '..') continue;
$tmpfn = $root."/".$t_fn;
if(stristr($t_fn, '.xlsxtmp')) {
if(time() - filemtime($tmpfn) > 600) @unlink($tmpfn);
}
}
closedir($dir);
file_put_contents($fn, base64_decode($sourceZip));
$zip = new ZipArchive;
$r = $zip->open($fn);
if(!$r) {
@unlink($fn);
return false;
}
//exit;
/*$cls = new ReflectionClass('REST_Controller');
foreach($cls->getProperties() as $property) {
if($property->getName() == 'rest') {
$property->setAccessible(true);
$rest = $property->getValue($GLOBALS['CI']);
die("ds");
}
}*/
//exit;
foreach($sheets as $sitem) {
if($sitem['sql']) {
/*$dbtype = '';
if($GLOBALS['CI']) {//print_r($GLOBALS['CI']);exit;
try {
$property = new ReflectionProperty('REST_Controller', 'rest');
$property->setAccessible(true);
$rest = $property->getValue($GLOBALS['CI']);
$conn_id = $rest->db->conn_id;
$dbtype = 'mysqli';
} catch(Exception $e) {
if($GLOBALS['CI']->db) {
$conn_id = $GLOBALS['CI']->db->conn_id;
$dbtype = 'mysqli';
}
}
}
if(!$dbtype) {
if(is_file("/home/www/ftdcdb.inc.php")) require("/home/www/ftdcdb.inc.php");
else require("d:/web/ftdcdb.inc.php");
$dbtype = 'mysql';
$hinfo = @mysql_get_host_info();
if($hinfo && stristr($hinfo, $ftdcdb_host)) {
$conn_id = '';
} else {
$conn_id = mysql_connect($ftdcdb_host, $ftdcdb_username, $ftdcdb_password);
mysql_select_db($ftdcdb_database);
mysql_query("set names utf8");
}
}*/
$dbtype = 'mysql';
require("/home/www/ftdcdb.inc.php");
$conn_id = mysql_connect($ftdcdb_host, $ftdcdb_username, $ftdcdb_password);
mysql_select_db($ftdcdb_database);
mysql_query("set names utf8");
break;
}
}
$workbook = '';
$rels = '';
foreach($sheets as $n => $sitem) {
$n1 = $n + 1;
$sheet_name = $sitem['sheet_name'];
if(!$sheet_name) $sheet_name = 'Sheet'.$n1;
$workbook .= '<sheet name="'.xlsx_filter_chr($sheet_name, $conv).'" sheetId="'.$n1.'" r:id="rIdx'.$n1.'"/>';
$rels .= '<Relationship Id="rIdx'.$n1.'" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet'.$n1.'.xml"/>';
}
$workbook = $xmlstr_5.$workbook.$xmlstr_6;
$rels = $xmlstr_7.$rels.'</Relationships>';
$zip->addFromString('xl/workbook.xml', $workbook);
$zip->addFromString('xl/_rels/workbook.xml.rels', $rels);
$strN = 1;
$xmlstr2 = $xmlstr_3.'><si><t></t><phoneticPr fontId="1" type="noConversion"/></si>';
$fn2 = $root."/".md5(microtime()."xml2").".xlsxtmp";
$fileList = array($fn2);
foreach($sheets as $sn => $sitem) {
$titles = $sitem['titles'];
$widths = $sitem['widths'];
$list = $sitem['list'];
$listfunc = $sitem['listfunc'];
$sql = $sitem['sql'];
$issql = false;
$func = $sitem['func'];
if($sql) $issql = true;
else {
if($listfunc) $list = $listfunc();
}
$fn1 = $root."/".md5(microtime().$fn1).".xlsxtmp";
$fileList[] = $fn1;
if($issql) {
if($dbtype == 'mysqli') {
$rs = mysqli_query($conn_id, $sql);
} else {
if($conn_id) $rs = mysql_unbuffered_query($sql, $conn_id);
else $rs = mysql_unbuffered_query($sql);
}
if(!$rs) {
return false;
}
$fields = array();
$funcname = ($dbtype == 'mysqli'?"mysqli_fetch_field":"mysql_fetch_field");
while($row = $funcname($rs)) {
$fields[] = $row->name;
}
if(!$titles) {
$titles = $fields;
}
}
$colnum = count($titles);
$colstr = '';
foreach($titles as $n => $title) {
$width = 15;
if($widths && $widths[$n]) $width = $widths[$n];
$colstr .= '<col min="'.($n+1).'" max="'.($n+1).'" width="'.$width.'" customWidth="1"/> ';
}
$xmlstr = $xmlstr_1.$colstr.'</cols><sheetData>';
$xmlstr .= '<row r="1" spans="1:2" x14ac:dyDescent="0.15">';
foreach($titles as $n => $title) {
$idx = $strN;
$strN++;
$xmlstr2 .= '<si><t>'.xlsx_filter_chr($title, $conv).'</t><phoneticPr fontId="1" type="noConversion"/></si>';
$xmlstr .= '<c r="'.$xlschars[$n].'1" s="1" t="s"><v>'.$idx.'</v></c>';
}
$xmlstr .= '</row>';
$n1 = -1;
while(1) {
$n1++;
if($issql) {
$funcname = ($dbtype == 'mysqli'?"mysqli_fetch_row":"mysql_fetch_row");
$item = $funcname($rs);
if(!$item) break;
} else {
if($n1 >= count($list)) break;
$item = $list[$n1];
}
if($func) {
$row2 = array();
if($fields) {
foreach($item as $k => $v) {
$row2[$fields[$k]] = $v;
}
}
$item = $func($item, $row2);
}
$xmlstr .= '<row r="'.($n1+2).'" spans="1:'.$colnum.'" x14ac:dyDescent="0.15">';
foreach($item as $n2 => $value) {
$value = $value.'';
if($value == '') {
$xmlstr .= '<c r="'.$xlschars[$n2].($n1+2).'" t="s"><v>0</v></c>';
continue;
}
if(is_numeric($value)) {
if(strstr($value, ".")) {
if(substr($value, 0, 1) == '.') $value = "0".$value;
$xmlstr .= '<c r="'.$xlschars[$n2].($n1+2).'"><v>'.$value.'</v></c>';
continue;
} else {
if(substr($value, 0, 1) != '0' && strlen($value) <= 10) {
$xmlstr .= '<c r="'.$xlschars[$n2].($n1+2).'"><v>'.$value.'</v></c>';
continue;
}
}
}
$idx = $strN;
$strN++;
$xmlstr2 .= '<si><t>'.xlsx_filter_chr($value, $conv).'</t><phoneticPr fontId="1" type="noConversion"/></si>'."\n";
$xmlstr .= '<c r="'.$xlschars[$n2].($n1+2).'" t="s" s="2"><v>'.$idx.'</v></c>';
}
$xmlstr .= '</row>';
if(strlen($xmlstr) > 50000) {
file_put_contents($fn1, $xmlstr, FILE_APPEND);
$xmlstr = '';
}
if(strlen($xmlstr2) > 50000) {
file_put_contents($fn2, $xmlstr2, FILE_APPEND);
$xmlstr2 = '';
}
}
$xmlstr .= $xmlstr_2;
file_put_contents($fn1, $xmlstr, FILE_APPEND);
$zip->addFile($fn1, 'xl/worksheets/sheet'.($sn+1).'.xml');
}
$xmlstr2 .= '</sst>';
file_put_contents($fn2, $xmlstr2, FILE_APPEND);
$zip->addFile($fn2, 'xl/sharedStrings.xml');
$zip->close();
foreach($fileList as $fn) @unlink($fn);
return true;
}