4

我已经使用代码在数据库中导入 csv 文件,但是如何读取该文件数据并显示它

在 Drupal 7 中

我使用以下代码导入 csv 文件

<?php
  function file_upload_permission() {
    return array(
      'administer uploader' => array(
       'title' => t('Administer Uploader'),
       'description' => t('Allow the following roles to upload csv files to the server.'),
           ),
         );
     }

     /**
     * Implements hook_menu()
     */
     function file_upload_menu() {

      $items['file_upload/import'] = array(
      'title' => 'Upload a File',
      'type' => MENU_CALLBACK,
        'description' => 'Import a csv',
        'page callback' => 'drupal_get_form',
    'page arguments' => array('file_upload_import_form'),
         'access arguments' => array('access content'),
     'access callback' => TRUE
       ); 

    return $items;
   }

    /**
     * Builds a form that will allow users to upload csv files
     *   hook_menu()
     */
     function file_upload_import_form($form, $form_state) {

           $form['notes'] = array(
          '#type' => 'markup',
          '#markup' => '<div class="import-notes">A few notes when uploading. <ul><li>Make    
         sure           the file is in a .csv format.</li><li>Columns should be in *this*  
           order</li><li>Be sure to click the "Upload" button when you select a csv.</li>
         </ul></div>',
         '#upload_location' => 'public://tmp/',
          );

        $form['import'] = array(
          '#title' => t('Import'),
          '#type' => 'managed_file',
          '#description' => t('The uploaded csv will be imported and temporarily saved.'),
          '#upload_location' => 'public://tmp/',
          '#upload_validators' => array(
             'file_validate_extensions' => array('csv'),
                                  ),
                );

        $form['submit'] = array (
         '#type' => 'submit',
         '#value' => t('Import'),
         );
          return $form;

    }

      /**
      * Submit handler for file_upload_import_form()
      */
    function file_upload_import_form_submit($form, $form_state) {

    // Check to make sure that the file was uploaded to the server properly
       $uri = db_query("SELECT uri FROM {file_managed} WHERE fid = :fid", array(
                      ':fid' => $form_state['input']['import']['fid'],
                      ))->fetchField();

         if(!empty($uri)) {
         if(file_exists(drupal_realpath($uri))) { 
          // Open the csv
          $handle = fopen(drupal_realpath($uri), "r");
         // Go through each row in the csv and run a function on it. In this case we are 
           parsing by '|' (pipe) characters.

          // If you want commas are any other character, replace the pipe with it.

           while (($data = fgetcsv($handle, 0, ',', '"')) !== FALSE) {

       $result = db_insert('test')->fields(array('price' => $data[1],))->execute();
       $operations[] = array(
          'file_upload_import_batch_processing',  // The function to run on each row
           array($data),  // The row in the csv
          );
      }

      // Once everything is gathered and ready to be processed... well... process it!
      $batch = array(
      'title' => t('Importing CSV...'),
      'operations' => $operations,  // Runs all of the queued processes from the while loop 
       above.
     'finished' => 'file_upload_import_finished', // Function to run when the import is 
              successful
      'error_message' => t('The installation has encountered an error.'),
      'progress_message' => t('Imported @current of @total products.'),
     );
     batch_set($batch);
    fclose($handle);    
  }
}
 else {
  drupal_set_message(t('There was an error uploading your file. Please contact a System 
   administator.'), 'error');
  } 


}

此代码适用于将文件上传到特定文件夹和带有表 file_managed 的​​数据库中,但问题是,上传后如何显示该 Csv 文件数据并将该数据插入数据库的新表中?

if anyone knows , please let me know,
thanks in advance.
4

2 回答 2

3

通过一些调整,这应该对你有用(如果我正确理解了你的问题):

/**
 ** View the table td_e_list
  */

function access_td_e_list_view() {

  $results = db_query("SELECT * FROM {td_e_list}");
  $header = array(t('Department'),t('Name'),t('Office'),t('Mobile'),t('Home'),t('Email'),t('Alt. Email'),t('D/R Office'));

  $rows = array();

  foreach($results AS $result) {
    $rows[] = array(
      $result->dept,
      $result->name,
      $result->office,
      $result->mobile,
      $result->home,
      $result->email,
      $result->altemail,
      $result->drphone,
      );
  }
  return theme('table', array('header' => $header, 'rows' => $rows));
}
于 2013-05-28T19:20:36.847 回答
1

您可以使用允许导入 CSV 文件的Feeds模块。Feeds 通常会根据导入的数据创建节点,因此您最终会得到一堆节点,每个节点对应于 CSV 文件中的一行。

如果要将数据导入自定义表格,可以将数据与 Feed 结合使用。在项目页面上它说:

您可以使用 Feed 将 RSS、Atom、CSV 或 OPML 文件导入数据表。

于 2012-10-13T17:18:54.757 回答