1. <?php
  2.  
  3. if(!defined('BASEPATH')) exit('No direct script access allowed');
  4. //物资发料单明细
  5. class Read_write{
  6. /**
  7. * $name:选择的类型(CSV,EXCEL2003,2007)
  8. * $titles:标题数组
  9. * $querys:查询返回的数组 $query->result_array();
  10. * $filename:保存的文件名称
  11. */
  12. function write_Factory($titles,$querys,$filename,$name="EXCEL2003"){
  13.  
  14. $CI = &get_instance();
  15. $filename=mb_convert_encoding($filename, "GBK","UTF-8");
  16.  
  17. switch ($name) {
  18. case "CSV":
  19. $CI->excel->write_CSV($titles,$querys,$filename);
  20. break;
  21. case "EXCEL2003":
  22. $CI->excel->write_EXCEL2003($titles,$querys,$filename);
  23. break;
  24. case "EXCEL2007":
  25. $CI->excel->write_EXCEL2007($titles,$querys,$filename);
  26. break;
  27. }
  28. }
  29.  
  30. /**
  31. * $name:
  32. */
  33. function read_Facotry($filePath,$sql,$sheet=0,$curRow=2,$riqi=TRUE,$merge=FALSE,$mergeCol="B"){
  34. $CI = &get_instance();
  35. $name=$this->_file_extend($filePath);
  36. switch ($name) {
  37. case "csv":
  38. $CI->excel->read_CSV($filePath,$sql,$sheet,$curRow,$riqi,$merge,$mergeCol);
  39. break;
  40. case "xls":
  41. $CI->excel->read_2003Excel($filePath,$sql,$sheet,$curRow,$riqi,$merge,$mergeCol);
  42. break;
  43. case "xlsx":
  44. $CI->excel->read_EXCEL2007($filePath,$sql,$sheet,$curRow,$riqi,$merge,$mergeCol);
  45. break;
  46. }
  47. $CI->mytool->import_info("filePath=$filePath,sql=$sql");
  48. }
  49. /**
  50. * 2012-1-14 读取工作薄名称(sheetnames)
  51. */
  52. function read_sheetNames($filePath){
  53. $CI = &get_instance();
  54. $name=$this->_file_extend($filePath);
  55. $sheetnames;
  56. switch ($name) {
  57. case "csv":
  58. $sheetnames=$CI->excel->read_CSV_Sheet($filePath);
  59. break;
  60. case "xls":
  61. $sheetnames=$CI->excel->read_2003Excel_Sheet($filePath);
  62. break;
  63. case "xlsx":
  64. $sheetnames=$CI->excel->read_EXCEL2007_Sheets($filePath);
  65. break;
  66. }
  67. return $sheetnames;
  68. }
  69. //读取文件后缀名
  70. function _file_extend($file_name){
  71. $extend =explode("." , $file_name);
  72. $last=count($extend)-1;
  73. return $extend[$last];
  74. }
  75. //-----------------------------------------------预备保留
  76. //2011-12-21新增CVS导出功能
  77. public function export_csv($filename,$title,$datas, $delim = ",", $newline = "\n", $enclosure = '"'){
  78. $CI = &get_instance();
  79. $cvs= $this->_csv_from_result($title,$datas,$delim,$newline,$enclosure);
  80. $CI->load->helper('download');
  81. $name=mb_convert_encoding($filename, "GBK","UTF-8");
  82. force_download($name, $cvs);
  83. }
  84. /**
  85. * @param $titles:标题
  86. * @param $datas:数据
  87. */
  88. function _csv_from_result($titles,$datas, $delim = ",", $newline = "\n", $enclosure = '"'){
  89. $out = '';
  90. // First generate the headings from the table column names
  91. foreach ($titles as $name){
  92. $name=mb_convert_encoding($name, "GBK","UTF-8");
  93. $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $name).$enclosure.$delim;
  94. }
  95.  
  96. $out = rtrim($out);
  97. $out .= $newline;
  98. // Next blast through the result array and build out the rows
  99. foreach ($datas as $row)
  100. {
  101. foreach ($row as $item)
  102. {
  103. $item=mb_convert_encoding($item, "GBK","UTF-8");
  104. $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $item).$enclosure.$delim;
  105. }
  106. $out = rtrim($out);
  107. $out .= $newline;
  108. }
  109.  
  110. return $out;
  111. }
  112.  
  113. }
  1. <?php
  2. /**
  3. * PHPExcel
  4. *
  5. * Copyright (C) 2006 - 2010 PHPExcel
  6. *
  7. * This library is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Lesser General Public
  9. * License as published by the Free Software Foundation; either
  10. * version 2.1 of the License, or (at your option) any later version.
  11. *
  12. * This library is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with this library; if not, write to the Free Software
  19. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20. *
  21. * @category PHPExcel
  22. * @package PHPExcel
  23. * @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
  24. * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
  25. * @version 1.7.4, 2010-08-26
  26. */
  27. /** Error reporting */
  28. error_reporting(E_ALL);
  29.  
  30. date_default_timezone_set ('Asia/Shanghai');
  31.  
  32. /** PHPExcel */
  33. require_once 'Classes/PHPExcel.php';
  34. require_once 'Classes/PHPExcel/IOFactory.php';
  35. /**
  36. * 输出到页面上的EXCEL
  37. */
  38. /**
  39. * CI_Excel
  40. *
  41. * @package ci
  42. * @author admin
  43. * @copyright 2011
  44. * @version $Id$
  45. * @access public
  46. */
  47. class CI_Excel
  48. {
  49. //列头,Excel每列上的标识
  50. private $cellArray = array(
  51. 1=>'A', 2=>'B', 3=>'C', 4=>'D', 5=>'E',
  52. 6=>'F', 7=>'G', 8=>'H', 9=>'I',10=>'J',
  53. 11=>'K',12=>'L',13=>'M',14=>'N',15=>'O',
  54. 16=>'P',17=>'Q',18=>'R',19=>'S',20=>'T',
  55. 21=>'U',22=>'V',23=>'W',24=>'X',25=>'Y',
  56. 26=>'Z',
  57. 27=>'AA', 28=>'AB', 29=>'AC', 30=>'AD', 31=>'AE',
  58. 32=>'AF', 33=>'AG', 34=>'AH', 35=>'AI',36=>'AJ',
  59. 37=>'AK',38=>'AL',39=>'AM',40=>'AN',41=>'AO',
  60. 42=>'AP',43=>'AQ',44=>'AR',45=>'AS',46=>'AT',
  61. 47=>'AU',48=>'AV',49=>'AW',50=>'AX',51=>'AY',
  62. 52=>'AZ', 53=>'BA', 54=>'BB', 55=>'BC', 56=>'BD', 57=>'BE',
  63. 58=>'BF', 59=>'BG', 60=>'BH', 61=>'BI', 62=>'BJ', 63=>'BK', 64=>'BL');
  64. private $E2003 = 'E2003';
  65. private $E2007 = 'E2007';
  66. private $ECSV = 'ECSV';
  67. private $tempName; //当读取合并文件时,如果第二行为空,则取第一行的名称
  68. /*********************************导出数据开始****************************************************/
  69. /**
  70. * 生成Excel2007文件
  71. */
  72. function write_EXCEL2007($title='',$data='',$name='')
  73. {
  74. $objPHPExcel=$this->_excelComm($title,$data,$name);
  75. // Redirect output to a client’s web browser (Excel2007)
  76. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8');
  77. header("Content-Disposition: attachment;filename=$name.xlsx");
  78. header('Cache-Control: max-age=0');
  79.  
  80. $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");
  81. $objWriter->save('php://output'); //output 允许向输出缓冲机制写入数据,和 print() 与 echo() 的方式相同。
  82. exit;
  83. }
  84. /**
  85. * 生成Excel2003文件
  86. */
  87. function write_EXCEL2003($title='',$data='',$name=''){
  88.  
  89. $objPHPExcel=$this->_excelComm($title,$data,$name);
  90. //Redirect output to a client’s web browser (Excel5)
  91. header('Content-Type: application/vnd.ms-excel;charset=UTF-8');
  92. header("Content-Disposition: attachment;filename=$name.xls");
  93. header('Cache-Control: max-age=0');
  94.  
  95. $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  96. $objWriter->save('php://output');
  97.  
  98. }
  99. /**
  100. * 生成CSV文件
  101. */
  102. function write_CSV($title='',$data='',$name=''){
  103. $objPHPExcel=$this->_excelComm($title,$data,$name);
  104.  
  105. header("Content-Type: text/csv;charset=UTF-8");
  106. header("Content-Disposition: attachment; filename=$name.csv");
  107. header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
  108. header('Expires:0');
  109. header('Pragma:public');
  110. $objWriter = new PHPExcel_Writer_CSV($objPHPExcel,'CSV');
  111. $objWriter->save("php://output");
  112. exit;
  113. }
  114.  
  115. function _excelComm($title,$data,$name){
  116. // Create new PHPExcel object
  117. $objPHPExcel = new PHPExcel();
  118. $objPHPExcel=$this->_writeTitle($title,$objPHPExcel);
  119. $objPHPExcel=$this->_writeDatas($data,$objPHPExcel);
  120. $objPHPExcel=$this->_write_comm($name,$objPHPExcel);
  121. return $objPHPExcel;
  122. }
  123.  
  124. //输出标题
  125. function _writeTitle($title,$objPHPExcel){
  126. //表头循环(标题)
  127. foreach ($title as $tkey => $tvalue){
  128. $tkey = $tkey+1;
  129. $cell = $this->cellArray[$tkey].'1'; //第$tkey列的第1行,列的标识符(a..z)
  130. // Add some data //表头
  131. // $tvalue=mb_convert_encoding($tvalue, "UTF-8","GBK");
  132. $objPHPExcel->setActiveSheetIndex(0)->setCellValue($cell, $tvalue); //设置第$row列的值(标题)
  133. }
  134. return $objPHPExcel;
  135. }
  136. //输出内容
  137. function _writeDatas($data,$objPHPExcel){
  138. //内容循环(数据库查询的返回值)
  139. foreach($data as $key =>$value) {
  140. $i = 1;
  141. foreach ($value as $mkey =>$mvalue){ //返回的类型是array([0]=>array());,所以此处要循环它的value,也就是里面的array
  142.  
  143. $rows = $key+2; //开始是第二行
  144. $mrow = $this->cellArray[$i].$rows; //第$i列的第$row行
  145. // $mvalue=mb_convert_encoding($mvalue, "GBK","UTF-8");
  146. // print_r($mrow."--->".$mvalue);
  147.  
  148. $objPHPExcel->setActiveSheetIndex(0)->setCellValueExplicit($mrow, $mvalue);
  149. $i++;
  150. }
  151. }
  152. return $objPHPExcel;
  153. }
  154. function _write_comm($name,$objPHPExcel){
  155. // Rename sheet(左下角的标题)
  156. //$objPHPExcel->getActiveSheet()->setTitle($name);
  157. // Set active sheet index to the first sheet, so Excel opens this as the first sheet
  158. $objPHPExcel->setActiveSheetIndex(0); //默认显示
  159. return $objPHPExcel;
  160. }
  161. /*********************************导出数据结束****************************************************/
  162.  
  163. /*********************************读取数据开始****************************************************/
  164.  
  165. /**
  166. * 使用方法,$insertSql:insert xx (x1,x2,x3,x4) value (
  167. */
  168. // function _comm_insert($objReader,$filePath,$insertSql,$sheet=2,$curRow=2,$riqi=TRUE){
  169. function _comm_insert($objPHPExcel,$insertSql,$curRow,$merge=FALSE,$mergeCol='B'){
  170. $CI = &get_instance();
  171. $currentSheet = $objPHPExcel->getSheet();//得到指定的激活
  172. /**取得一共有多少列*/
  173. $allColumn = $currentSheet->getHighestColumn();
  174. /**取得一共有多少行*/
  175. $allRow = $currentSheet->getHighestRow();
  176. $size=strlen($allColumn);//如果超出Z,则出现不执行下去
  177. $esql="";
  178.  
  179. for($currentRow = $curRow;$currentRow<=$allRow;$currentRow++){
  180. $sql=$insertSql;
  181. if($size==2){
  182. $i=1;
  183. $currentColumn='A';
  184. while ($i <= 26) {
  185. $address = $currentColumn.$currentRow;
  186. $temp=$currentSheet->getCell($address)->getCalculatedValue();
  187. $sql.='"'.$temp.'"'.",";
  188. $currentColumn++;
  189. $i++;
  190. }
  191. for($currentColumn='AA';$currentColumn<=$allColumn;$currentColumn++){
  192. $address = $currentColumn.$currentRow;
  193. $sql.='"'.$currentSheet->getCell($address)->getCalculatedValue().'"'.",";
  194. }
  195.  
  196. }else{
  197. for($currentColumn='A';$currentColumn<=$allColumn;$currentColumn++){
  198. if($merge){//如果是读取合并的值,则判断,如果此行的值为NULL,则把前面的tempName赋值给$temp;
  199. if($currentColumn==$mergeCol){//这里先指定从B列的名字开始读取合并了的值。以后遇到不同的再调整。
  200. $temp=$currentSheet->getCell($mergeCol.$currentRow)->getCalculatedValue();
  201. if(empty($temp)){
  202. $temp=$this->tempName;
  203. }else{
  204. $this->tempName=$temp;
  205. }
  206. }else{
  207. $address = $currentColumn.$currentRow;//getValue()
  208. $temp=$currentSheet->getCell($address)->getCalculatedValue();
  209. }
  210. }else{
  211. $address = $currentColumn.$currentRow;//getValue()
  212. $temp=$currentSheet->getCell($address)->getCalculatedValue();
  213. }
  214. $sql=$sql.'"'.$temp.'"'.",";
  215. }
  216. }
  217. $esql=rtrim($sql,",").')';
  218. //echo($esql);
  219. //return;
  220. $CI->db->simple_query($esql);
  221. }
  222. }
  223. /**
  224. * $filePath:读取文件的路径
  225. * $insertSql:拼写的SQL
  226. */
  227. function read_EXCEL2007($filePath,$insertSql,$sheet=0,$curRow=2,$riqi=TRUE,$merge=FALSE,$mergeCol="B"){
  228. $objs=$this->_get_PHPExcel($this->E2007,$filePath,$sheet,$insertSql,$riqi);
  229. $this->_comm_insert($objs["EXCEL"],$objs["SQL"],$curRow,$merge,$mergeCol);
  230. }
  231. /**
  232. * 读取2003Excel
  233. */
  234. function read_2003Excel($filePath,$insertSql,$sheet=0,$curRow=2,$riqi=TRUE,$merge=FALSE,$mergeCol="B"){
  235. $objs=$this->_get_PHPExcel($this->E2003,$filePath,$sheet,$insertSql,$riqi);
  236. $this->_comm_insert($objs["EXCEL"],$objs["SQL"],$curRow,$merge,$mergeCol);
  237. }
  238. /**
  239. * 读取CSV
  240. */
  241. function read_CSV($filePath,$insertSql,$sheet=0,$curRow=2,$riqi=TRUE,$merge=FALSE,$mergeCol="B"){
  242. $objs=$this->_get_PHPExcel($this->ECSV,$filePath,$sheet,$insertSql,$riqi,$mergeCol);
  243. $this->_comm_insert($objs["EXCEL"],$objs["SQL"],$curRow,$merge);
  244. }
  245. //--------------------------------读取工作薄信息开始
  246. /**
  247. * 读取Excel2007工作薄名称
  248. */
  249. function read_EXCEL2007_Sheets($filePath){
  250. return $this->_get_sheetnames($this->E2007,$filePath);
  251. }
  252.  
  253. /**
  254. * 读取2003Excel工作薄名称
  255. */
  256. function read_2003Excel_Sheet($filePath){
  257. return $this->_get_sheetnames($this->E2003,$filePath);
  258. }
  259. /**
  260. * 读取CSV工作薄名称
  261. */
  262. function read_CSV_Sheet($filePath){
  263. return $this->_get_sheetnames($this->ECSV,$filePath);
  264. }
  265. //--------------------------------读取工作薄信息结束
  266. /**
  267. * 2012-1-14 --------------------------
  268. */
  269. //读取Reader流
  270. function _get_Reader($name){
  271. $reader=null;
  272. switch ($name) {
  273. case $this->E2003:
  274. $reader = new PHPExcel_Reader_Excel5();
  275. break;
  276. case $this->E2007:
  277. $reader = new PHPExcel_Reader_Excel2007();
  278. break;
  279. case $this->ECSV:
  280. $reader = new PHPExcel_Reader_CSV();
  281. break;
  282. }
  283. return $reader;
  284. }
  285. //得到$objPHPExcel文件对象
  286. function _get_PHPExcel($name,$filePath,$sheet,$insertSql,$riqi){
  287. $reader=$this->_get_Reader($name);
  288. $PHPExcel= $this->_init_Excel($reader,$filePath,$sheet);
  289. if($riqi){ //如果不需要日期,则忽略.
  290. $insertSql=$insertSql.'"'.$reader->getSheetTitle().'"'.",";//第一个字段固定是日期2012-1-9
  291. }
  292. return array("EXCEL"=>$PHPExcel,"SQL"=>$insertSql);
  293. }
  294.  
  295. //得到工作薄名称
  296. function _get_sheetnames($name,$filePath){
  297. $reader=$this->_get_Reader($name);
  298. $this->_init_Excel($reader,$filePath);
  299. return $reader->getAllSheets();
  300. }
  301. //加载文件
  302. function _init_Excel($objReader,$filePath,$sheet=''){
  303. $objReader->setReadDataOnly(true);
  304. if(!empty($sheet)){
  305. $objReader->setSheetIndex($sheet);//读取第几个Sheet。
  306. }
  307. return $objReader->load("$filePath");
  308. }
  309. //-------------------------------2012-1-14
  310. }
  311. /*********************************读取数据结束****************************************************/
  1. ------------------------导入操作------------------------
  2. /**
  3. * $sql="INSERT INTO ".mymsg::WY_MMB." (dizhi,xingming) VALUES (";
  4. */
  5. //先上传再读取文件
  6. function upByFile($sql, $url, $curRow = 2, $RIQI = true,$merge = FALSE,$mergeCol='B')
  7. {
  8.  
  9. $CI = &get_instance();
  10. $config['allowed_types'] = '*'; //充许所有文件
  11. $config['upload_path'] = IMPORT; // 只在文件的路径
  12. $CI->load->library('upload', $config);
  13.  
  14. if ($CI->upload->do_upload()) { //默认名是:userfile
  15. $data = $CI->upload->data();
  16.  
  17. $full_name = $data['full_path']; //得到保存后的路径
  18. $full_name = mb_convert_encoding($full_name, "GBK", "UTF-8");
  19. $sheet = $CI->input->post("sheet"); //读取第x列图表
  20. if (empty($sheet)) {
  21. $sheet = 0;
  22. }
  23.  
  24. $CI->read_write->read_Facotry($full_name, $sql, $sheet, $curRow, $RIQI,$merge,$mergeCol); //执行插入命令
  25.  
  26. }
  27.  
  28. $this->alert_msg(mymsg::IMPORT_SUCCESS, site_url($url));
  29. }
  30.  
  31. ------------------------------导出操作----------------------------------
  32. //导出指定的表字段
  33. public function show_export(){
  34. //-----数据库字段
  35. $field=implode(",",$this->input->post("listCheckBox_show"));//数据库字段
  36. //显示名称
  37. $titleArray=$this->input->post("listCheckBox_field");//显示的字段名称(字段Comment注解名,因为传进来的有些空数组,所以必须过滤)
  38. $title=array();
  39. foreach ($titleArray as $key => $value) {
  40. if (!empty($value)) {
  41. $title[]=$value;
  42. }
  43. }
  44. //---数据库表名
  45. $table=$this->input->post("tableName");
  46. //--数据库表名称(Comment注释)
  47. $show_name=$this->input->post("tableComment");
  48. //--导出类型
  49. $type=$this->input->post("type");
  50.  
  51. //--where 年月
  52. $y_month=$this->input->post("year_month");
  53. if(!empty($y_month)){
  54. $where["riqi"]=$y_month;
  55. $datas=$this->mcom_model->queryByWhereReField($field,$where,$table);
  56. }else{
  57. //--写出的数据
  58. $datas=$this->mcom_model->queryByField($field,$table);
  59. }
  60.  
  61. //---开始导出
  62. $this->read_write->write_Factory($title,$datas,$show_name,$type);
  63. }

PHPExcel导出导入excel、csv等格式数据的更多相关文章

  1. 用PHPExcel导出导入Excel

    thinkPHP5.0框架 查询数据库调用Excel方法 public function exportlist(){ $orderModel = new OrderModel(); if($start ...

  2. Asp.net导出Excel/Csv文本格式数据

    刚刚开始做Excel相关的项目,所以遇到的问题不管大小都给记录一下 偶然的机会在添加数据的时候全改成了数字,结果输出的时候全自动变成了科学计数法,这是excel的强大功能,能自动识别数字和字符串,太聪 ...

  3. PHPExcel导出导入

    便于记忆 这里写一个PHPexcel导出的demo 我们构造一个数据   $letter = array('A','B','D','E'); //sheet索引   $date = array( ar ...

  4. .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)

    .Net MVC  导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构)   public cl ...

  5. 利用Aspose.Cell控件导入Excel非强类型的数据

    导入Excel的操作是非常常见的操作,可以使用Aspose.Cell.APOI.MyXls.OLEDB.Excel VBA等操作Excel文件,从而实现数据的导入,在导入数据的时候,如果是强类型的数据 ...

  6. oracle数据库中导入Excel表格中的数据

    1.点击[工具]-->[ODBC 导入器],如图: 2.在导入器里选择第一个[来自ODBC的数据],用户名/系统DSN-->填写[Excel Files],输入用户名和密码,点击 [连接] ...

  7. DevExpress XtraGrid 数据导出导入Excel

    // <summary> /// 导出按钮 /// </summary> /// <param name="sender"></param ...

  8. php利用PHPExcel类导出导入Excel用法

    PHPExcel类是php一个excel表格处理插件了,下面我来给大家介绍利用PHPExcel类来导入与导出excel表格的应用方法,有需要了解的朋友不防参考参考(PHPExcel自己百度下载这里不介 ...

  9. ThinkPhp 使用PhpExcel导出导入多语言文件

    在ThinkPHP 里已经实现了多语言功能,只要在指定的目录下创建对应的语言文件并填充内容,即可实现多语言功能 而多语言的翻译却是一个很麻烦的事情,因为客户特定的行业问题导致我们翻译可能是不准确的 于 ...

随机推荐

  1. java常用面板

    public class JPanelTest extends JFrame{    public JPanelTest(){        Container c=getContentPane(); ...

  2. 【转】sed命令详解

    原文:http://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html sed命令行格式为: sed [-nefri]  'command' ...

  3. 什么是条带化(striping) ?(转载)

    条带(strip)是把连续的数据分割成相同大小的数据块,把每段数据分别写入到阵列中的不同磁盘上的方法.简单的说,条带是一种将多个磁盘驱动器合并为一个卷的方法. 许多情况下,这是通过硬件控制器来完成的. ...

  4. Caught exception while loading file struts-default.xml 错误

    严重: Exception starting filter struts2 Caught exception while loading file struts-default.xml - [unkn ...

  5. Grunt - Karma 单元测试

    Karma 是 Goolge 开源的一个 Test runner, 可以配合 Grunt 使用. 1. 相关插件介绍 1.1 Karma 的官网 http://karma-runner.github. ...

  6. canvas-a10isPointPath2.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. C++调用WebService服务问题总结

    近期接手一部分C++研发工作,同时与.NET开发小组进行软件功能协作,于是需要调用.NET WebService服务,已完成数据的网络通讯业务功能:结束之余,将手头碰到的问题总结罗列如下: C++如何 ...

  8. 洛谷P1206 [USACO1.2]回文平方数 Palindromic Squares

    P1206 [USACO1.2]回文平方数 Palindromic Squares 271通过 501提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 暂时没有 ...

  9. linux Apache和php配置

    今天安装Apache httpd web服务器,安装过程分为三部分: (1)./configure (2)make (3)make install (需要root权限) 我的apache 安装在/ho ...

  10. 见怪不怪的typedef

    typedef是C++中的一个十分重要的关键字,它有强大的功能和方法的用途.但是有时候,碰到一些用到typedef的地方却感到很奇怪了. 给个栗子尝尝: typedef void(*pFun)(voi ...