PHPexcel:多sheet上传和下载
excel表格上传和下载,断断续续写了很久,赶紧记下来万一以后忘记就亏大了= =
数据库有三张表:
aaarticlea/png;base64,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" alt="" />aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAARMAAABrCAYAAABUr2agAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAABYaSURBVHhe7Z1dbx5HFYCXW4TENfwDKi5TK7Eq1CL1phUSv4AaJzXNFVdIUYlQRVrcOKGJShSUC5BDQE1thTiFmDhJ4QrViYJR67ikdr+o09IkzQdpm7RAM8yZ3dmdmZ3ZndmZ/fRxtbXffWdn55w555kzZzY70czMDMFD1sGZM2fIrVu38EAdoA1obAD8Q/cTIUjyMEWYIEhxMDHbAMLEIQJDmCBMECYIkyBTNh1MvvPTU8TnQONEQA3FBjAy8YxMfEAC1w7FkFAOhGInYbKwcpusL2oSwAsrhH5DFh0AEDL3U3tksjRJRqIRMrnEDXOJTI5EJIoiMjaLxloMLEFXk6oe69RdfN+g/ZOzA037bcqkSdJm7KhxmAAo5J88HPQwWSC5S1lFzcFFB5Nt27blEtjT09NW5+BayUEUA1maHCHR2CxGLxarR5KunBytADSsnhjm/BiZXFL6o/swacqOGoeJHCkskvXbK2RRTwlC6HcLLAoBkNwmKwtitBLDRRvB1BS51A4TxWlmxyKSN946RtkaHMICACGnRqF1xRwwGiOzmj6Rz3dfd6F1Y+q35mGyuE4ZsRAnRGHasr6YS47KkYkpIlEH//ojFBNMIBKpcuQiE4RJ5SgsqMPMjpFoZJIsQX/A3ywyGSNjFO4wnZFHeoQJh0vzMKEQWVxPogwOFoBKGoXMEBEmUHYdDjGHopSPI5f2YKJizW+aE4+G4BxZeJ0fIXkHxiMoLwvlYuOWIhrBOfLlZ8mYGMpzJ7oln8/qg/M0rzObTQFYviB1Optoqqhuk9zJfSe5c2f3yemKTU9EnYn3o22HOlI585Ee1MdkkupJ7s/yWfA3r5/DRJZJyqEo0yXxu3x/qPfl91OmWrq22eiGDVhKn2sisCpRYyswmZmh0xv4bz2bpgBAeMSi5kzyeRbdc3bDggl0Zulom3OaxDHEkTWpJ+8cohOpo6voOFBO/D4xRHXk5rkdU5vSqCu+Pj9905xngOJOm9xXuk+WrJZ0lXM0MUGaJCONMMlAAY6etROuEwEiw0Sa+kjtpteNJVFOGukk15p0pWl/Tl+aMml+TckZyXZUpufq0+iWYEKnODQqkZOnWV6keDVHl3RdIAtSPqWefwpQ+zRHMa5SmKQjjLgCxEcefk4cRfmIpJZXYCJEGfnkowqass+KcSqgS0dA7XkVYupKlwVMdPWa2pCO2rGzA0yyKELVoxqZFME5mRpJEaQYISj9IdqBqa3GqInD36CbUj33ECY82tAlUOVpjhCFwFSILQ+rPxDV5HMvIZeFoa7aE7DOMFGXkDMD4qOqPpPPlwp5eQ1MCkdu0fjrhokIxSZgArqI7yPqbolOIUZ4ZAIOma6y6XImwrlkipNGFtpoROmPVmCiDjDuUGknMkmfF4mnO+pzI4XTHAAKi2ogsFmk+ZfmVnQ6BxNqdJPp8yeKUYNBUuMfSxyDRQDG8rppjvzsxOyYON3wgEkSTYkj/iRbbjWE31IOpwJMcvcrm+aIEMmezwAYpPkNCbRJGWEJX1oJUiIB6TtTfxRO02Zpzofqq2pkUqZncYpk+tuwUtcCTAAgwjKvuLqTLOmKMMlyKcKqDlsBipeVF1jytRmgdG+aoyRqlWdSWGJSiTCkZGXOAYTyxqRhWSSifm964EpMGvMyRYlBXR7HYpqTQDR7XqQ8AcvzVUVJ2ixBmYCYwlafMM+ABN+P0HJicljbH2r0IvWFLt/ioJuyBGyfYGKMJKTpSxat8CCEPnRCnzMBEGU/6RIzWyGi54UVodBTnEamOYGfzSjPubiHslWy/J27pjBnIuhElzsqWAXqnJyB7alMvhYik3qSo3XAQ62z9mmOsfPVEdviEfvSVZW6QVKhzbUYv7gKkyU9m3kYsG4dd6t+hInD07ImmMDDZ1WPMtpX+Z6HzkH/vUgtjt6QMyhTNgRJPXpHmHjCpIqz4zX1GDPqtV29IkwQJpUfYUfnbdd5u6Z/hAnCBGHS5ylch9qOMEGYIEw65JBdizZc2oMwQZggTBAmQWzACBP4Ao+8DlxIjWUxp7CRbMDEi2gjKQFlRadHG6jPBhAmGPoGCX3RSetz0r7oFmGCMEGYoA0EsQGECRpSEEPqy+iJ7awvgkKYIEwQJmgDQWwAYYKGFMSQcMSvb8Tvi24RJggTL5isra15Xd8XR8F2lsMSYYIw8YIBwqTcyTYKiBAmCBOECdqAlw1wWCJMqCHduHGDbsexTmCUvXTpElldXWWf4fxGGVWqyukamTzwwAOk7Dh48OAg9f6l7/6A+BxV+6ip65xhcujQIfLQQw+VGgQ3GCgL1zQlkOt9jh07Rp588kmyY8eO3AHnZ2dxD+AinVaBiW43JH4O7Gbv3r1kiEDxAQlc62rbTZd3hokLSDhQHn744c4q4siRI2R+fp6cPHmSHadOnUr/hvPw/ZUrVzrbfmYw9B2mbb1VrCpMoh/+mqgHAAVs5vr164MFStMO3uT9nGHiGpk8+OCDnY5MdBGJes4JJoaNrcRNrvjf6esWtTDI9nURDULeIlPcYlPzt/RSZIu3yVfIHVSFiSk6AZjAjxtQ4vfQlr6+UtqBT96LqPTaCrpRHXnhr6+QX7www45/vP0OObN4Pv3Mz5t+w7V6MOj61bAvsrIDINtGg+1coL4/t1pS2RkmTZKuiXuZpjgcKPD91atXK0Ums2OaHfg0bz2Xt6dMOtIl2rAoWwyh6hszVYWJGJUAPOAzj0zUnEqhHSjvfc1Du2gXRHHrjeo6sLXTmzdvkuMv/4UB5Jczx8iV6zfI706eKgUKXAPX6u4j72Ecb7w+W/i2/Qw+ZpuoposND5PTp0+zVzDAb5jWzM3Nsd/w+ezZs+y7a9eu1Q4TeWSkHZ5CRxOhlDqQurEWNTK6j0u2CXc28jCDUvbhsXUOKFcVJkV5E/E7AIupPakj0T1+YRN3SQ51hz01siiJIOuaNn5Ep3BH/jjPAAIgAaAAWEwRCZSFa7Q64JEF24gt2+eYb6SWH8yU7T2k3QrFDeAbikxcpzldT8CKEchTTz0l2Tj/zmmaIxhteWSS3yYCjDh3nWIsWXiqj2LEvXPlqEeYDiTO5hveV4WJLmdiyqFYw00EhCYCNO8vJMK7miNZt5Haxwcffkh+dfwlBhCY6sCURwcTKANl9XXLU5O0n2m/jrGdE0EOdRP2eCqcB2VL05yhJWDV/AjQ5NClb5OVm3PkHvmCwcUeJvKubro8iXSOGXzWkcwg6Dafputix9fvU6Neox1ZNRFNWzDxj0w0uhYjLFXWBC76PZmrwUTXT7ZQeXf9cmFEAtHKO/TxBNv6rMslU+LS3FuFaNV5muMamXQ9AQtTmunpafL888+TqakpZuM/vvBldvx8+ZvklSsHyYfXqnVqeWRC4ZAmwWAL0IK5atHudGrOJP2sOJxhtE6dooIB+UYmPF9StLoTNmeiizyqwQTaJQLF2qGT6PXi6ho5cHQ2F5XAOfiuvD7e7vj3LB2MjAMY71vFVrIotroOeDudYVIuYP1hYsg27Ny5k4Hk8OHD5OjRoxJMOFR2LX2N/OGtHeT966sWHSyuElgkYGnnxtEBj1BM0U08py0dUWgYmxqUbotLi2Sti36rwsQ/Mkn0LMAY2q0ms3OABiiDYxXmndzyB6BvF52JZc+/tpyDyTl6zq4+GSZLYl7I1M/KebCnNOL13BJ1w8NEN83hEFF//+RvXyUvvDFG1q6alulEkMJ0RDVKHf2FaUu6TKdCqGROa4xMOKRKlpCjatl7nwSsKRJRV3mKErDM4UqT0bJsmfMofeXpSHbOrx9o1XyJfV0qTExTYEEHoq1I0a5gmxy4jsvhzjBxneZ0PQF74MAB6QlYcZpjgsrOC18hZ96dLBw93ObmiRGkOZQimHjkTFj04wiqEoPqV2SiA3ySh+ozTNIEvSCfAA0xOuORG7NPSWY5IrbNpcGTynwp3xkmQ0vAwigA/wbnvffeY/8mB/5tjm9kku8o4XmGnNFmKywxgJJlTnG6wv4uCL0LIxNhOqB9sMvkYHbT1aowCbaa4xKZKFOiLALwzxfYRxN5vVaPTOK6pKkKtxNmE3Rlh9lOMoCw1S5I8ls84OcQlXCgOMPENTLpegJWZwQqTHb9/evkpbd+RC5/9EbpXNYMEt0IaIoU7KIHMX9iHEn4cqkIsYAbfFeFSV05E7U/1VHZekWswUjFBybG5W5NziTThcWqo2MyHoDiDBMfAvflWg6TPa9+g/z5n8+Razc+KIVIX2QL3c7WYeIwgoaWPVR9b7z9NplZOJMmYkPV23Q9CBONMR68+C1y7vJvyc1bhicPB2DAoQytCkzKXkHg9Dj9gPqCQyVU3zRdD8JkQMbYtPFUWc1po414T7v8l6+eECYIE68pnGtk4muweH0zYKiiZ4QJwgRhgjbgZQMcPAgTNCQvQ8LIpLuRQpXowucahAnCxAsmPsaH1w4LRAgThAnCBG0giA1Etg8Pvfnmm2T9LsGjRR1AH2y0n6HI3Bc5fNqJMGkRDq5w9unovkJoKDL3RQ6fdiJMECad5oyPcXdJsL7I4dNOhAnCpEs+l2uLj3F3SbC+yOHTToQJwqRLPocwabk3ECY9AoJrnkQs79PRsY3Ok4logv6/Pz/+MndDVkmOtX1kS7SF7FsztG1+gkRb9hHT13VK5KNvjEx6BCKfjkaY1OmC5XUjTAQd4dJw+8viCJM1sm9LRCb6FFolPuTUd32NTO5+9h9ic4AyXr5O8GhRB9AHNn1lLvMSGY+2kTnLPve7l51dld1Dlvl1MkXfEjZ+IkzdZfcO+b1T353YRl+puJdcbKGfnKCnBGSRrcJkmMyTR+mcb/vTdG6XvF7wvqfXMtBc2EfuE147+OiLHELJdS9m37PvXjTUcx3KZy9Dlu7RolO3BdXMIGOnGtnzegqXi3s2Zwa4speMCHrLnE+ACSsjgEX9/BmUzXQv3svWZkKUy2SW25M6m1FWAI54zWYytaddJ031UaJr5lN9hMmdu58TmyMPEyrwY/MxQBg8KFwuADTWyPbH9pHfcGdnoJggk+xzAodNyfccIlI9YlleZ1LvpohkYNp4URL0QdpXc1upwe0hy6z/VshuGLHnkr/H+Xn6GcpFW8kcK3eCAiL5++IeChN+nn4nfYZym8nui9w2xPrt7MXGpmzKSDJLctrIynWS6SjTWYty5HQttvNzMjcOMBH60NJHbfRZVsYrMimrnH8PNzn70b3kOEkjhs1k+3n+eZVs3yR+vkcO76IjZTqyPU5+xq5Vryv4fPRx7YZC9+1aFdrB778xfsuOJTi8CgZqfMtTov4dYcIAlN8eY2RqxWrgsbUpm3LFMImBoJVVgm0CDt25hhxVkkPsrw62szydrC8R2XQolLGGyfnn2BQndXr2uSJMNj1HDqcA2xjAyICdl1d2rHgEAwcHZ0odnRlqfJ71bW4UtIhMWnQ61R4LYVIkawedNJVtqDD59M5nxOaATj1z7V5ynCSP0MjkiXP88yp5gkYm7DNEFBQC00nZaRahPE6eYZ/V64o+w3cReeQov8c98sz3eD3ZuaxNwz8HfSD11TIFx8hWMk73wtm9nPRj4kSvJf362m7YMnIrOc4+x9Mc9jdcS7c94Nfly0HondnG8XFeh5292NiUTRlZZj7dspVVlCG+FqYPXDc29w9VRpKD6V7sk261s3JkYqssa5hcA7AISVMKAIhM3GFC4XAujnJ4yC2CZSNBhMuag8mdxEHGTwiQSc4lehuhEJANN4NCDJBYv3I5DptM9yJYbG0mRDlV5rTNDApFsqoyUHDujvNM3YIJbac0rWy/nZVh8smnd4nNAZ16+sYXeLSoA+gDm74aUpmgMh8fpzCZIq9a2nxIPQaVo8b2eyVgP/7kDrE5GEw+oDDBozUdQB/Y9NWQylSXeZk8OzJOfp/a9xz5Po3A7n92uRUdVpfDzj9D9XljMFm48j+CR3s66ItBhjJsqMdL5ld3k/uFaXJbIPGWw3LAD6F3L5jc/vhTYnPATRbep46ER2s6gD6w6ashlRmKzH2Rwwsm/779CbE54CZ/+td/8WhRB9AHNn01pDJDkbkvciBMWnTwJgHbF4MMCbOhyNwXObxgAhfjgTpAG0Ab4DZQeWnY9mU9PsSq2ji8TtYA7DOz0X6GInNf5PBpZ4Qw6Y97+nR0f6QcJkD70nc+7USY9MjLfDq6R2JKTR2KzH2Rw6edCJMeeZlPR/dITIRJi53lY2MIkxY7zvXWPh3teq+ulB+KzH2Rw6edKUzgH3sV5U+qJ2DXyP7Rovd29u+N6W05mk9Ht9Vm3/sORea+yOHTTgkmRUBBmPi6hf/12o6Glw/TgUB9yfL8hPJyo9H9rWyd4Cu1j3H73tvpekM/8Dq6IQcM3NwuRsl+zV4aPu3MwcQEFBkmZdGG2A1lZfsUmZTJ4mR+zoXljo7bEo1OkAlN5AcwGdVZi/Nd273Ax7ibaXlxP3QHJnE7U5tg8MvvoeSj74i/HFl9TZ/60mSECZhFl2DCzVTfJoRJMyjJ7lJsGz5OGkSStf1kVIKHvr0+7TTCBOAiAiWDiRgqwciYhM+ssVlonYXdvNHyddn3amQilysfXU3llXaKilQVK32G62gIuD97Y37cBoPcQXrarhJ9R5thkg0Q/drFT9SGj3HbaTVUqY7DBCIRZS6sG3B89F0IExEoxZEJVeSEMCeXQqgkDBSdWfpehEniyOlcriwSiB08DxzNefGepTChUOSKZ2X5/LKsPaEMU1+PC0ykieb+0Qz69TYxeO0+xh28MYUVdhsma2ADdcOEv8BY9zZy8eXGNtMc1uA0OuGjoU7J4jkBJkkSS22LMTqB8rrEova8cM9SmIjJKbiu3zCJoyp9wq1Zh3O/G8LEXWfaK5qITEwwUd+SXgiTZIqTOr3krI4wcVl1cIZJ4lAIk0AWWn81CJNAOs75Sg05E/6yYjEa0L2suRAmSkPjCEWOTMQQS/5enebIy5zzE0Xz/Xg6I+Zf9gv5DSmiEdsoTV1oWlVqr26q1bfIhMoghLRsmdgF0oHsN0Q1CJMQWtQsHhgGYh99RypMTG99V58zSac0zEh5XiROwI5SAGSZ44SA9Jw+IagkYI2JXINSpfIieAoSsLAuI0zJ5PYWwUS4rgXn1C4NK5tlpQwRp4wttDWUC/gYd6g2FNcj2z63cfW5n07IYfSVTEKfdkb8jfOghKK3z1d/aK2ZLt0Id/Hp6L7qZygy90UOn3ZGtm+bbxcmapQRR0Aq/fvqMLbt9ulo23t0rdxQZO6LHD7tjGzfNt8uTLpm4u20x6ej22mx/12HInNf5PBpZ2T7tnmEib9j+Nbg09G+927r+qHI3Bc5fNoZ2b4QGWHSljuFSY613/pqLfAx7mp3rOeqvsjh006EST22U0utPh1dS4MaqHQoMvdFDp92Ri5vJYcb4YE6QBsYtg1UHSOiqhfidagB1ABqQNQAwgTtATWAGgiiAYRJEDViJagB1ADCBG0ANYAaCKIBhEkQNWIlqAHUAMIEbQA1gBoIogGESRA1YiWoAdQAwgRtADWAGgiigf8D55rBRlRmvm4AAAAASUVORK5CYII=" alt="" width="275" height="106" />
aaarticlea/png;base64,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" alt="" />
上传一张表格,每个sheet对应一个if_table_n,if_user_table记录上传信息,if_column_map记录每个if_table_n的列名与数据库列名对应,if_system_config记录表格数目。
1 public function uploadFile() {
2
3 if(!empty($_FILES)) {
4 $upload = new \Think\Upload();// 实例化上传类
5 $upload->maxSize = 1000000000 ;// 设置附件上传大小
6 $upload->rootPath = './Uploads/'; // 设置附件上传根目录
7 // $upload->savePath = $filePath.'/'; // 设置附件上传(子)目录
8 $info = $upload->upload();
9
10 if($info === false) {// 上传错误提示错误信息
11 $this->error("上传错误:".$upload->getError(),"http://192.168.151.175/basicinfo",3);
12 }
13
14 //判断文件是否为excel格式
15 $fileName = $info["file"]['name'];
16
17
18 $fileType = substr($fileName,strrpos($fileName, '.') + 1);
19
20 if(strtolower($fileType) !== "xls" && strtolower($fileType) !== "xlsx") {
21 $this->error("文件格式错误!");
22 }
23
24 //文件名
25 $filen=substr($fileName,0,strrpos($fileName, '.'));
26
27 //判断引入何种格式的phpexcel 对应两种版本的excel
28 import("Org.Util.PHPExcel");
29
30 $PHPExcel = new \PHPExcel();
31
32 if($fileType === "xlsx") {
33 //如果excel文件后缀名为.xlsx,导入类
34 import("Org.Util.PHPExcel.Reader.Excel2007");
35 $PHPReader=new \PHPExcel_Reader_Excel2007();
36 }
37 else {
38 import("Org.Util.PHPExcel.Reader.Excel5");
39 $PHPReader=new \PHPExcel_Reader_Excel5();
40 }
41
42
43 $PHPExcel=$PHPReader->load(SITE_PATH."Uploads/".$info["file"]["savepath"].$info["file"]['savename']);
44 // 确定当前excel文件的数量
45 $res = D('IfSystemConfig')->getValueByKey('table_count');
46
47 //获取工作表个数
48 $sheetCount = $PHPExcel->getSheetCount();
49
50 //获取sheet的名字
51 $sheetname = $PHPExcel->getSheetNames();
52
53 // 当前表数量字段,加上工作表的数量
54 $result = D('IfSystemConfig')
55 ->setValueByKey("table_count",intval($res[0]['value'])+ $sheetCount);
56
57 if($result === false) {
58 $this->error("数据上传失败!");
59 }
60
61 $unique_name_id = $res[0]['value'];
62
63 for($s = 0;$s<$sheetCount;$s++)
64 {
65 /**
66 * 保存表的信息
67 * @access public
68 * @param string $tablename 表名
69 * @param string $filename 文件名(全路径)
70 * @return null
71 */
72 $PHPExcel=$PHPReader->load($info["file"]['savename']);
73
74 //选择工作表
75 $currentSheet = $PHPExcel->getSheet($s);
76
77 //获取总列数
78 $allColumn=$currentSheet->getHighestColumn();
79
80 //获取总行数
81 $allRow=$currentSheet->getHighestRow();
82
83 //获取整张表,写入二维数组arr中 arr[行][列]
84 for($currentRow=1;$currentRow<=$allRow;$currentRow++){
85 //从哪列开始,A表示第一列
86 for($currentColumn='A';$currentColumn<=$allColumn;$currentColumn++){
87 //数据坐标
88 $address=$currentColumn.$currentRow;
89 $cvalue = $currentSheet->getCell($address)->getValue();
90
91 //读取到的数据,保存到数组$arr中
92 $arr[$currentRow][$currentColumn]=$cvalue;
93 }
94 }
95
96 // 表、列、代表含义的映射
97 // 列位自定义
98 //field_0 为自增形id
99 $j = 1;
100 $data['map_table'] = $tablename;
101 $data['col_name'] = "field_".'0';
102 $data['col_meaning'] = "";
103
104 //从field_1 .... field_n,对应excel列名
105 $res = D('IfColumnMap')->saveData($data);
106 foreach ($arr[1] as $key => $value) {
107 $data['col_name'] = "field_".$j;
108 $data['col_meaning'] = $arr[1][$key];
109 $res = D('IfColumnMap')->saveData($data);
110 $j++;
111 }
112
113 // 查找每个字段数据的最大长度
114 // 用来确定每个字段的长度
115 $t = 0;
116 foreach ($arr[2] as $key => $value) {
117 $ml = 0;
118 for($i = 2;$i <= count($arr);$i++) {
119 if(strlen($arr[$i][$key]) > $ml) {
120 $ml = strlen($arr[$i][$key]);
121 }
122 }
123 $maxLenght[$t] = $ml;
124 $t++;
125 }
126
127 // 如果长度大于256,就将字段类型设置为text类型
128 for($i = 0;$i < count($maxLenght); $i++) {
129
130 if($maxLenght[$i] > 256) {
131 $type[$i] = "text";
132 }
133 else {
134 $type[$i] = "varchar(".($maxLenght[$i]+15).")";
135 }
136 }
137
138 //建立if_table_n的sql语句
139 //utf-8编码 default charset=utf8
140 //自增类型 int primary key not null auto_increment
141 $sqlString = "CREATE TABLE ".$tablename." ( ";
142 $sqlString .= "field_0"." "."int primary key not null auto_increment,";
143 $sqlString .= "field_1"." ".$type[0];
144 for($i = 1;$i < count($maxLenght);$i++) {
145 $sqlString .= ","."field_".($i+1)." ".$type[$i];
146 }
147 $sqlString .= ") default charset=utf8";
148
149 // 数据表创建
150 $Model = new \Think\Model(); // 实例化一个model对象 没有对应任何数据表
151 $Model->execute($sqlString);
152
153 // 为新建的数据表if_table_n添加数据
154 for($i = 2;$i <= count($arr);$i++) {
155 $k = 1;
156 foreach ($arr[$i] as $key => $value) {
157 $info['field_'.$k] = $arr[$i][$key];
158 $k++;
159 }
160 M($tablename)->add($info);
161 }
162
163 // 插入 用户、表 数据之间的关系
164 //if_user_table
165 $data = array(
166 'userid' => session('if_userid'),
167 'unique_name' => 'if_table_'.$unique_name_id,
168 'file_name' => $filen,
169 'save_name' => $info["file"]['savename'],
170 'save_path' => $info["file"]["savepath"],
171 'submit_time' => date("Y-m-d h:i:s"),
172 'tag' => 1,
173 'file_id' => $res[0]['value'],
174 'sheet' => $s,
175 'sheetname' => $sheetname[$s]
176 );
177
178 $result = D('IfUserTable')->saveData($data);
179
180 if($result === false) {
181 $this->error("数据上传失败!");
182 }
183 $unique_name_id++;
184 }
185
186 $this->success("上传成功!",__APP__."/Home/Index/index");
187
188 }
下载此表格:
还有一些未用到的设置:
设置单元格宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20);
设置单元格高度
$objPHPExcel->getActiveSheet()->getRowDimension($i)->setRowHeight(40);
合并单元格
$objPHPExcel->getActiveSheet()->mergeCells('A18:E22');
拆分单元格
$objPHPExcel->getActiveSheet()->unmergeCells('A28:B28');
设置保护cell,保护工作表
$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);
$objPHPExcel->getActiveSheet()->protectCells('A3:E13', 'PHPExcel');
设置格式
$objPHPExcel->getActiveSheet()->getStyle('E4')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);
$objPHPExcel->getActiveSheet()->duplicateStyle( $objPHPExcel->getActiveSheet()->getStyle('E4'), 'E5:E13' );
设置加粗
$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setBold(true);
设置垂直居中
$objPHPExcel->getActiveSheet()->getStyle('A18')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
设置字号
$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(10);
设置边框
$objPHPExcel->getActiveSheet()->getStyle('A1:I20')->getBorders()->getAllBorders()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);
设置边框颜色
$objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getLeft()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getTop()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getBottom()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getTop()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getBottom()->getColor()->setARGB('FF993300');
$objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getRight()->getColor()->setARGB('FF993300');
插入图像
$objDrawing = new PHPExcel_Worksheet_Drawing();
/*设置图片路径 切记:只能是本地图片*/
$objDrawing->setPath('图像地址');
/*设置图片高度*/
$objDrawing->setHeight(180);//照片高度
$objDrawing->setWidth(150); //照片宽度
/*设置图片要插入的单元格*/
$objDrawing->setCoordinates('E2');
/*设置图片所在单元格的格式*/
$objDrawing->setOffsetX(5);
$objDrawing->setRotation(5);
$objDrawing->getShadow()->setVisible(true);
$objDrawing->getShadow()->setDirection(50);
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
设置单元格背景色
$objPHPExcel->getActiveSheet(0)->getStyle('A1')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
$objPHPExcel->getActiveSheet(0)->getStyle('A1')->getFill()->getStartColor()->setARGB('FFCAE8EA');
1 public function downloadFile() {
2 $file_id = I('file_id');
3 $tablename = D('IfUserTable')->getNameByFileid($file_id);
4
5 import("Org.Util.PHPExcel");
6 //不清楚为什么\PHPExcel()前要加\,不加会报错,大哥也没解释清楚
7 $objPHPExcel = new \PHPExcel();
8 import("Org.Util.PHPExcel.Reader.Excel5");
9
10 //或者include 'PHPExcel/Writer/Excel5.php'; 用于输出.xls的
11
12 // 实例化Create new PHPExcel object
13
14 /* @func 设置文档基本属性 */
15 $objPHPExcel->getProperties()
16 ->setCreator("ctos") //设置创建人
17 ->setLastModifiedBy("ctos") //最后修改人
18 ->setTitle("Office 2007 XLSX Test Document") //标题
19 ->setSubject("Office 2007 XLSX Test Document") //备注
20 ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.") //设置描述
21 ->setKeywords("office 2007 openxml php") //设置关键字 | 标记
22 ->setCategory("Test result file"); //设置类别
23
24
25 for ($i = 0; $i < count($tablename); $i++) {
26
27 $Model = new \Think\Model();
28
29 $name = $tablename[$i]['unique_name'];
30
31 $sqlString = "select * from ".$name;
32
33 $column_info[$i] = D('IfColumnMap')->getDataByTable($name);
34
35 $res[$i] = $Model->query($sqlString);
36
37 //首先要创建一个sheet的空间,否则都会写在同一个sheet中
38 $objPHPExcel->createSheet();
39 $objPHPExcel->setActiveSheetIndex($i);
40
41 // 表头写入
42 for($currentColumn='A',$j=1;$j<count($column_info[$i]);$currentColumn++,$j++){
43
44 $colunmname = $column_info[$i][$j]['col_meaning'];
45
46 $objPHPExcel->getActiveSheet()
47 ->setCellValue($currentColumn.'1', $colunmname);
48 }
49
50 // 写入内容 某个内容写进An,Bn...
51 for($currentRow=2,$j=0;$currentRow<=count($res[$i])+1;$currentRow++,$j++){
52
53 for($currentColumn='A',$k=1;$k<count($column_info[$i]);$currentColumn++,$k++){
54 //设置单元格左对齐
55 $objPHPExcel->getActiveSheet()
56 ->getStyle($currentColumn. $currentRow)
57 ->getAlignment()
58 ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
59
60 $objPHPExcel->getActiveSheet()->setCellValue($currentColumn. $currentRow, $res[$i][$j]['field_'.($k)]);
61 }
62
63 }
64 //设置sheet的标题
65 $objPHPExcel->getActiveSheet()->setTitle($tablename[$i]['sheetname']);
66
67 ob_end_clean(); //清空缓存
68 }
69 header("Pragma: public");
70
71 header("Expires: 0");
72
73 header("Cache-Control:must-revalidate,post-check=0,pre-check=0");
74
75 header("Content-Type:application/force-download");
76
77 header("Content-Type:application/vnd.ms-execl");
78
79 header("Content-Type:application/octet-stream");
80
81 header("Content-Type:application/download");
82 //设置文件的名称
83 header('Content-Disposition:attachment;filename='.$tablename['0']['file_name'].'.xls');
84
85 header("Content-Transfer-Encoding:binary");
86
87 //不清楚为什么\PHPExcel_IOFactory前要加\,不加会报错,大哥也没解释清楚
88 $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
89
90 $objWriter->save('php://output');
91 }
PHPexcel:多sheet上传和下载的更多相关文章
- Thinkphp5+PHPExcel实现批量上传表格数据功能
http://www.jb51.net/article/129262.htm 1.首先要下载PHPExcel放到vendor文件夹下,我的路径是:项目/vendor/PHPExcel/,把下载的PHP ...
- excel上传和下载
需要注意的地方: 1.js构造表单并提交 2.js中文传参encodeURI(encodeURI("中文")),action接收并转换value = URLDecoder.deco ...
- java对excel表格的上传和下载处理
Excel表格文件的上传和下载,java中涉及到文件肯定会有io流的知识. 而excel文件就要涉及到poi技术,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为 ...
- vue实现Excel文件的上传与下载
一.前言项目中使用到比较多的关于Excel的前端上传与下载,整理出来,以便后续使用或分析他人. 1.前端vue:模板下载与导入Excel 导入Excel封装了子组件,点击导入按钮可调用子组件,打开文件 ...
- win7下利用ftp实现华为路由器的上传和下载
win7下利用ftp实现华为路由器的上传和下载 1. Win7下ftp的安装和配置 (1)开始->控制面板->程序->程序和功能->打开或关闭Windows功能 (2)在Wi ...
- Java实现FTP文件与文件夹的上传和下载
Java实现FTP文件与文件夹的上传和下载 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制 ...
- java web学习总结(二十四) -------------------Servlet文件上传和下载的实现
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- Struts2入门(七)——Struts2的文件上传和下载
一.前言 在之前的随笔之中,我们已经了解Java通过上传组件来实现上传和下载,这次我们来了解Struts2的上传和下载. 注意:文件上传时,我们需要将表单提交方式设置为"POST" ...
- php实现文件上传与下载(上)
php实现文件的上传与下载是一个挺基本的功能,一般网站多多少少都会有这样的需求在内,当然不是说所有的文件都可以被上传,那这网络就太没有安全性可言了.因为接触php时间不长,今天写练练手,随笔也就是公开 ...
随机推荐
- 使用开源word操作组件DocX的记录
1.DocX简介 1.1 简介 DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱尔兰的一个叫Cathal Coffey的博士生开发出来的.DocX使得操作w ...
- 模拟springmvc 内部登陆,跳过spring filter
说明,因为我们的一个项目B使用spring mvc配置的登陆框架,所以对登陆控制全部交给了spring,导致我们如果想通过另一个项目A登陆到项目B就不太容易,具体是项目A登陆了,我们通过一个连接直接跳 ...
- sae Servlet class XXXX is not a javax.servlet.Servlet
以前都是使用myeclipse开发web工程上传sae后没有问题,但是使用javaee导出war包上传sae 无法访问 Servlet class XXXX is not a javax.servl ...
- Linux企业级项目实践之网络爬虫(26)——线程池
一旦有一个抓取请求开始,就创建一个新的线程,由该线程执行任务,任务执行完毕之后,线程就退出.这就是"即时创建,即时销毁"的策略.尽管与创建进程相比,创建线程的时间已经大大的缩短,但 ...
- linux mysql默认安装在哪个目录
MySQL安装完成后不象SQL Server默认安装在一个目录,它的数据库文件.配置文件和命令文件分别在不同的目录,了解这些目录非常重要,尤其对于Linux的初学者,因为 Linux本身的目录结构就比 ...
- M - 约会安排 - hdu 4553
寒假来了,又到了小明和女神们约会的季节. 小明虽为�丝级码农,但非常活跃,女神们常常在小明网上的大段发言后热情回复“呵呵”,所以,小明的最爱就是和女神们约会.与此同时,也有很多基友找他开黑,由于数量 ...
- Solr4.4.0部署到tomcat上
主要步骤如下: 1.下载solr-4.4.0.tgz 2.解压缩solr-4.4.0.tgz,命令tar -xzvf solr-4.4.0.tgz 3.压缩后进入到solr-4.4.0目录,将 exa ...
- Apache Hadoop最佳实践和反模式
摘要:本文介绍了在Apache Hadoop上运行应用程序的最佳实践,实际上,我们引入了网格模式(Grid Pattern)的概念,它和设计模式类似,它代表运行在网格(Grid)上的应用程序的可复用解 ...
- java笔记4之比较运算符
/* 比较运算符: ==,!=,>,>=,<,<= 特点: 无论你的操作是简单还是复杂,结果是boolean类型. ...
- hdu 4277 USACO ORZ(dfs+剪枝)
Problem Description Like everyone, cows enjoy variety. Their current fancy is new shapes for pasture ...