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

by admin on 2019年10月3日

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

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

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

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 导入数据库与数据库导入

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

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

1.导出整个数据库

mysql教程 导入数据库教程与数据库导入
/*
目前 mysql 支持的免费备份工具有:

 

复制代码 代码如下:

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

mysqldump、mysqlhotcopy

图片 1

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

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

,还可以用 sql 语法进行备份:

 

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

2.导出一个表

backup table

图片 2

复制代码 代码如下:

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

或者

 

set_time_limit(0);

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

select into outfile

 

来确保运行时间不受限制。
二、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不是很大)

3.导出一个数据库结构

,又或者备份

图片 3

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

MySQLdump -u jason -p jason -d --add-drop-table roomdatadb> d:\roomdatadb.sql 

二进制日志(binlog)

 

复制代码 代码如下:

-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

现在对于小数据量,可以直接用php教程myadmin来完成就ok了,
下面讲一下phpmyadmin导入数据的方法。

部分导入失败以及处理方案

<?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;
  }
}
?>

4.MySQL 数据库导入数据库

一、进行你的phpmyadmin,找到import按钮,这里会看到一个文件上传框文本文件的位置 
(最大限制:2 mb) 点击上传你的导入的文件就ok了。
附:你会看到 (最大限制:2 mb),我们来看看如何修改它的大小吧。
第一,找到php.ini 打开,查到post_max_size
,upload_max_filesize设置你要上传文件的大小ok了,重起apache.

异常1 : 在数据库master中拒绝 create database 权限

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

常用source 命令

第二种导入大数据的方法,一般是用命令方法了

  处理方法:可能你当前登陆的用户名没有该权限,可以直接使用Windows身份验证

复制代码 代码如下:

进入MySQL数据库控制台,

mysql大数据导入

 

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

如MySQL -u root -p

第一步:mysql -h localhost -uroot

异常2 : 无法用排他锁锁定该数据库,以执行该操作。 (.Net SqlClient Data
Provider)

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

MySQL>use 数据库

登录数据库

  处理方法:可能又其他进程或地方在使用该数据库,重启数据库服务搞定

您可能感兴趣的文章:

  • asp实现excel中的数据导入数据库
  • PHP将Excel导入数据库及数据库数据导出至Excel的方法
  • 利用phpexcel把excel导入数据库和数据库导出excel实现
  • PHP
    如何利用phpexcel导入数据库
  • Excel导入数据库时出现的文本截断问题解决方案
  • ASP.NET下将Excel表格中的数据规则的导入数据库思路分析及实现
  • C++
    中实现把EXCEL的数据导入数据库(ACCESS、MSSQL等)实例代码

然后使用source命令,后面参数为脚本文件如这里用到的.sql)

第二步:show databases;

 

MySQL>source d:\wcnc_db.sql 

打印数据库

可参看 MySQL数据的导出和MySQL 数据库导入工具:MySQLdump

第三步:use changchunmap;

 图片 4

转到对应当数据库

以上的相关内容就是对MySQL 数据库导入导出的介绍,望你能有所收获。

source   f:www.bKjia.c0mdbname.sql

数据库导入与导出的实际操作流程以及在实际操作中我们所要用到相关的脚本文件的介绍,以下就是文章的详…

导入数据库

导入数据库与数据库导入 mysql教程
导入数据库教程与数据库导入 /* 目前 mysql 支持的免费备份工具有:
mysqldump、mysqlhotcopy ,还可以用…

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图