某某茶叶有限公司欢迎您!
金沙棋牌在线 > 必赢棋牌官网 > Drupal读取Excel并导入数据库实例

Drupal读取Excel并导入数据库实例

时间:2019-12-29 06:39

先连接好数据库,然后打开左侧 对象资源管理器,选择数据库  右键单击 ---> 选择导入数据层应用程序

Drupal读取Excel并导入数据库实例

 这篇文章主要介绍了Drupal利用PHPExcel读取Excel并导入数据库的例子,需要的朋友可以参考下

PHPExcel 是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格,如 Excel (BIFF) .xls, Excel 2007 (OfficeOpenXML) .xlsx, CSV, Libre/OpenOffice Calc .ods, Gnumeric, PDF, HTML等等。

 

一、Drupal 通过Library 调用 PHPExcel

将PHPExcel 下载后,上传到Drupal目录:sites/all/libraries/PHPExcel

如果你的项目中安装了libraries模块,可以通过libraries_load($name);来调用。

如果没有安装libraries模块,可以简单的使用下列代码来调用:

 

 代码如下:require("sites/all/libraries/PHPExcel/PHPExcel/IOFactory.php");

 

注意为了确保Excel全部导入,程序可以会话很长的时间来进行。所以在代码开头部分加入:

 

代码如下:set_time_limit(0);

来确保运行时间不受限制。

二、Drupal 读取Excel并导入到数据库

Drupal 实现上传Excel文件后,读取Excel 内容,写入到数据库,打印导入结果消息。

归纳起来有这样几点:

1.Drupal 读取Excel 多行多列内容,列数从1到n,行数也是1到n。

2.Drupal 根据数据库结构 n 个字段分别用于存放Excel 1到n列,如果Excel 的列数很多,可以把n列值存放在1个字段中。

3.这里我解决的是Excel n列值存放到MySQL n个字段中(n不是很大)

 

这就是在Drupal最后提交上传文件后的函数:

 

 代码如下:<?php 

function excel_upload_form_submit($form, &$form_state) { 

  set_time_limit(0); 

  $timestamp = time(); 

  // 确保Excel文件上传了 

  if ($file = file_save_upload('file')) { 

    $row = 0; //解析行数 

    $paseRows = 0; //跳过行数 没有值的行 

    $insertRows = 0; //插入行数 

    $table = array( 

      'dbfield1′, 

      'dbfield2′, 

      'dbfield3, 

      'dbfield4′, 

      'dbfield5′, 

      … 

      'dbfieldn', 

    ); 

    require("sites/all/libraries/PHPExcel/PHPExcel/IOFactory.php"); 

    if(($handle = fopen ( $file->filepath, "r" )) !== FALSE) { 

      $PHPExcel = new PHPExcel (); 

      $PHPReader = new PHPExcel_Reader_Excel2007 (); 

      if (! $PHPReader->canRead ( $file->filepath )) { 

        $PHPReader = new PHPExcel_Reader_Excel5 (); 

        if (! $PHPReader->canRead ( $file->filepath )) { 

          echo 'no Excel'; 

          return; 

        } 

      } 

      $PHPExcel = $PHPReader->load ( $file->filepath ); 

      $currentSheet = $PHPExcel->getSheet ( 0 ); 

      /**取得一共有多少列*/ 

      $allColumn = $currentSheet->getHighestColumn(); 

      //取得共有多少列,若不使用此静态方法,获得的$col是文件列的最大的英文大写字母 

      $col = PHPExcel_Cell::columnIndexFromString($currentSheet->getHighestColumn()); 

      /**取得一共有多少行*/ 

      $allRow = $currentSheet->getHighestRow(); 

      //循环读取每个单元格的内容。注意行从1开始,列从A开始 

      for($rowIndex = 2; $rowIndex <= $allRow; $rowIndex++) { 

        $token_db = $row_db = $field = array(); 

        $i = 0; 

        $query = ”; 

        for($colIndex = 0; $colIndex <= $col; $colIndex++) { 

          //$addr = $colIndex.$rowIndex; 

          //$cell = $currentSheet->getCell($addr)->getValue(); 

          $cell = $currentSheet->getCellByColumnAndRow($colIndex, $rowIndex)->getValue(); 

          $cell = trim($cell); 

          if($cell instanceof PHPExcel_RichText) { 

            //富文本转换字符串 

            $cell = $cell->__toString(); 

          } 

          if ($colIndex == 'A' && !intval($cell)) { 

            $paseRows++; 

            break; 

          } 

          $field[] = $table[$i]; 

          $token_db[] = "'%s'"; 

          $row_db[] = $cell; 

          $query .= $table[$i]." = '%s', "; 

          $i++; 

        } 

        $row++; 

        if ($row_db) { 

          db_query('INSERT INTO {db_import} ('. implode(', ', $field) .', created) VALUES('. implode(', ', $token_db) .', %d)', array_merge($row_db, array($timestamp))); 

          $insertRows++; 

        } 

      } 

      fclose ( $handle ); 

    } 

    drupal_set_message(t('文件 @file 导入成功.', array('@file' => $file->filename))); 

    drupal_set_message("解析".$row."条数据完毕,新增共".$insertRows."条数据,没有试题类型ID的".$paseRows."条数据。"); 

  } 

  else { 

    drupal_set_message(t('File to import not found.'), 'error'); 

    $form_state['redirect'] = 'admin/content/db/import'; 

    return; 

  } 

?>

 

上面代码部分注意一下几点:

 

 代码如下:

$allColumn = $currentSheet->getHighestColumn();  //获取的列为英文大写字母的数组索引。

$col = PHPExcel_Cell::columnIndexFromString($currentSheet->getHighestColumn()); //将英文大写字母索引格式化为数字,索引值从0开始计算。

 

本代码支持读取Excel 2007 及之前的格式。

 

这篇文章主要介绍了Drupal利用PHPExcel读取Excel并导入数据库的例子,需要的朋友可以参考下 PHPExcel 是用来操作...

以下的文章主要介绍的是MySQL 数据库导入与导出的实际操作流程以及在实际操作中我们所要用到相关的脚本文件的介绍,以下就是文章的详细内容描述,望在你今后的学习会对你有所帮助。

PHPExcel 是用来操作Office Excel 文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格,如 Excel (BIFF) .xls, Excel 2007 (OfficeOpenXML) .xlsx, CSV, Libre/OpenOffice Calc .ods, Gnumeric, PDF, HTML等等。

根据提示向导一步步走就行了

1.导出整个数据库

一、Drupal 通过Library 调用 PHPExcel 将PHPExcel 下载后,上传到Drupal目录:sites/all/libraries/PHPExcel
如果你的项目中安装了libraries模块,可以通过libraries_load($name);来调用。
如果没有安装libraries模块,可以简单的使用下列代码来调用:
复制代码 代码如下:require("sites/all/libraries/PHPExcel/PHPExcel/IOFactory.php");

 

MySQLdump -u 用户名 -p 密码 数据库名 > 导出的文件名

注意为了确保Excel全部导入,程序可以会话很长的时间来进行。所以在代码开头部分加入:
复制代码 代码如下:set_time_limit(0);
来确保运行时间不受限制。
二、Drupal 读取Excel并导入到数据库 Drupal 实现上传Excel文件后,读取Excel 内容,写入到数据库,打印导入结果消息。
归纳起来有这样几点:
1.Drupal 读取Excel 多行多列内容,列数从1到n,行数也是1到n。
2.Drupal 根据数据库结构 n 个字段分别用于存放Excel 1到n列,如果Excel 的列数很多,可以把n列值存放在1个字段中。
3.这里我解决的是Excel n列值存放到MySQL n个字段中(n不是很大)

图片 1

MySQLdump -u jason -p jason roomdatadb> roomdatadb.sql 

这就是在Drupal最后提交上传文件后的函数:
复制代码 代码如下:function excel_upload_form_submit($form, &$form_state) {
  set_time_limit(0);
  $timestamp = time();
  // 确保Excel文件上传了
  if ($file = file_save_upload('file')) {
    $row = 0; //解析行数
    $paseRows = 0; //跳过行数 没有值的行
    $insertRows = 0; //插入行数
    $table = array(
      'dbfield1′,
      'dbfield2′,
      'dbfield3,
      'dbfield4′,
      'dbfield5′,
      …
      'dbfieldn',
    );
    require("sites/all/libraries/PHPExcel/PHPExcel/IOFactory.php");
    if(($handle = fopen ( $file->filepath, "r" )) !== FALSE) {
      $PHPExcel = new PHPExcel ();
      $PHPReader = new PHPExcel_Reader_Excel2007 ();
      if (! $PHPReader->canRead ( $file->filepath )) {
        $PHPReader = new PHPExcel_Reader_Excel5 ();
        if (! $PHPReader->canRead ( $file->filepath )) {
          echo 'no Excel';
          return;
        }
      }
      $PHPExcel = $PHPReader->load ( $file->filepath );
      $currentSheet = $PHPExcel->getSheet ( 0 );
      /**取得一共有多少列*/
      $allColumn = $currentSheet->getHighestColumn();
      //取得共有多少列,若不使用此静态方法,获得的$col是文件列的最大的英文大写字母
      $col = PHPExcel_Cell::columnIndexFromString($currentSheet->getHighestColumn());
      /**取得一共有多少行*/
      $allRow = $currentSheet->getHighestRow();
      //循环读取每个单元格的内容。注意行从1开始,列从A开始
      for($rowIndex = 2; $rowIndex <= $allRow; $rowIndex++) {
        $token_db = $row_db = $field = array();
        $i = 0;
        $query = ”;
        for($colIndex = 0; $colIndex <= $col; $colIndex++) {
          //$addr = $colIndex.$rowIndex;
          //$cell = $currentSheet->getCell($addr)->getValue();
          $cell = $currentSheet->getCellByColumnAndRow($colIndex, $rowIndex)->getValue();
          $cell = trim($cell);
          if($cell instanceof PHPExcel_RichText) {
            //富文本转换字符串
            $cell = $cell->__toString();
          }
          if ($colIndex == 'A' && !intval($cell)) {
            $paseRows++;
            break;
          }
          $field[] = $table[$i];
          $token_db[] = "'%s'";
          $row_db[] = $cell;
          $query .= $table[$i]." = '%s', ";
          $i++;
        }
        $row++;
        if ($row_db) {
          db_query('INSERT INTO {db_import} ('. implode(', ', $field) .', created) VALUES('. implode(', ', $token_db) .', %d)', array_merge($row_db, array($timestamp)));
          $insertRows++;
        }
      }
      fclose ( $handle );
    }
    drupal_set_message(t('文件 @file 导入成功.', array('@file' => $file->filename)));
    drupal_set_message("解析".$row."条数据完毕,新增共".$insertRows."条数据,没有试题类型ID的".$paseRows."条数据。");
  }
  else {
    drupal_set_message(t('File to import not found.'), 'error');
    $form_state['redirect'] = 'admin/content/db/import';
    return;
  }
}
?>

 

2.导出一个表

上面代码部分注意一下几点:
复制代码 代码如下:
$allColumn = $currentSheet->getHighestColumn();  //获取的列为英文大写字母的数组索引。
$col = PHPExcel_Cell::columnIndexFromString($currentSheet->getHighestColumn()); //将英文大写字母索引格式化为数字,索引值从0开始计算。

图片 2

MySQLdump -u 用户名 -p 密码 数据库名 表名> 导出的文件名

本代码支持读取Excel 2007 及之前的格式。