codememo

PHP의 Excel로 MySQL 데이터 내보내기

tipmemo 2023. 5. 8. 22:15
반응형

PHP의 Excel로 MySQL 데이터 내보내기

MySQL 데이터를 엑셀 파일로 가져오려고 하는데 엑셀 셀에 문제가 있습니다.내 모든 텍스트는 하나의 셀로 이동합니다. 각 행 값을 별도의 Excel 셀에 저장하고 싶습니다.내 코드는 다음과 같습니다.

$queryexport = ("
SELECT username,password,fullname FROM ecustomer_users
WHERE fk_customer='".$fk_customer."'
");

$row = mysql_fetch_assoc($queryexport);

$result = mysql_query($queryexport);
$header = '';

for ($i = 0; $i < $count; $i++){
   $header .= mysql_field_name($result, $i)."\t";
   }

while($row = mysql_fetch_row($result)){
   $line = '';
   foreach($row as $value){
          if(!isset($value) || $value == ""){
                 $value = "\t";
          }else{
                 $value = str_replace('"', '""', $value);
                 $value = '"' . $value . '"' . "\t";
                 }
          $line .= $value;
          }
   $data .= trim($line)."\n";
   $data = str_replace("\r", "", $data);

if ($data == "") {
   $data = "\nno matching records found\n";
   }
}
header("Content-type: application/vnd.ms-excel; name='excel'");
header("Content-Disposition: attachment; filename=exportfile.xls");
header("Pragma: no-cache");
header("Expires: 0");

// output data
echo $header."\n".$data;

mysql_close($conn);`

다음을 사용해 보십시오.

PHP 파트:

<?php
/*******EDIT LINES 3-8*******/
$DB_Server = "localhost"; //MySQL Server    
$DB_Username = "username"; //MySQL Username     
$DB_Password = "password";             //MySQL Password     
$DB_DBName = "databasename";         //MySQL Database Name  
$DB_TBLName = "tablename"; //MySQL Table Name   
$filename = "excelfilename";         //File Name
/*******YOU DO NOT NEED TO EDIT ANYTHING BELOW THIS LINE*******/    
//create MySQL connection   
$sql = "Select * from $DB_TBLName";
$Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password) or die("Couldn't connect to MySQL:<br>" . mysql_error() . "<br>" . mysql_errno());
//select database   
$Db = @mysql_select_db($DB_DBName, $Connect) or die("Couldn't select database:<br>" . mysql_error(). "<br>" . mysql_errno());   
//execute query 
$result = @mysql_query($sql,$Connect) or die("Couldn't execute query:<br>" . mysql_error(). "<br>" . mysql_errno());    
$file_ending = "xls";
//header info for browser
header("Content-Type: application/xls");    
header("Content-Disposition: attachment; filename=$filename.xls");  
header("Pragma: no-cache"); 
header("Expires: 0");
/*******Start of Formatting for Excel*******/   
//define separator (defines columns in excel & tabs in word)
$sep = "\t"; //tabbed character
//start of printing column names as names of MySQL fields
for ($i = 0; $i < mysql_num_fields($result); $i++) {
echo mysql_field_name($result,$i) . "\t";
}
print("\n");    
//end of printing column names  
//start while loop to get data
    while($row = mysql_fetch_row($result))
    {
        $schema_insert = "";
        for($j=0; $j<mysql_num_fields($result);$j++)
        {
            if(!isset($row[$j]))
                $schema_insert .= "NULL".$sep;
            elseif ($row[$j] != "")
                $schema_insert .= "$row[$j]".$sep;
            else
                $schema_insert .= "".$sep;
        }
        $schema_insert = str_replace($sep."$", "", $schema_insert);
        $schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert);
        $schema_insert .= "\t";
        print(trim($schema_insert));
        print "\n";
    }   
?>

이것이 당신의 문제를 해결하는 데 도움이 될 수 있다고 생각합니다.

이 코드를 사용해 보십시오.확실히 효과가 있습니다.

<?php
// Connection 

$conn=mysql_connect('localhost','root','');
$db=mysql_select_db('excel',$conn);

$filename = "Webinfopen.xls"; // File Name
// Download file
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: application/vnd.ms-excel");
$user_query = mysql_query('select name,work from info');
// Write data to file
$flag = false;
while ($row = mysql_fetch_assoc($user_query)) {
    if (!$flag) {
        // display field/column names as first row
        echo implode("\t", array_keys($row)) . "\r\n";
        $flag = true;
    }
    echo implode("\t", array_values($row)) . "\r\n";
}
?>

만약 당신이 단지 당신의 쿼리 데이터를 엑셀에 덤프하기를 원한다면 나는 이것을 자주 해야 하고 html 테이블을 사용하는 것은 매우 간단한 방법입니다.db 쿼리에는 mysqli를 사용하고 내보내기에는 다음 코드를 사용합니다.

header("Content-Type: application/xls");    
header("Content-Disposition: attachment; filename=filename.xls");  
header("Pragma: no-cache"); 
header("Expires: 0");


echo '<table border="1">';
//make the column headers what you want in whatever order you want
echo '<tr><th>Field Name 1</th><th>Field Name 2</th><th>Field Name 3</th></tr>';
//loop the query data to the table in same order as the headers
while ($row = mysqli_fetch_assoc($result)){
    echo "<tr><td>".$row['field1']."</td><td>".$row['field2']."</td><td>".$row['field3']."</td></tr>";
}
echo '</table>';

이것은 새로운 버전의 php 코드입니다.

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "your_dbname";
//mysql and db connection

$con = new mysqli($servername, $username, $password, $dbname);

if ($con->connect_error) {  //error check
    die("Connection failed: " . $con->connect_error);
}
else
{

}


$DB_TBLName = "your_table_name"; 
$filename = "excelfilename";  //your_file_name
$file_ending = "xls";   //file_extention

header("Content-Type: application/xls");    
header("Content-Disposition: attachment; filename=$filename.'.'.$file_ending");  
header("Pragma: no-cache"); 
header("Expires: 0");

$sep = "\t";

$sql="SELECT * FROM $DB_TBLName"; 
$resultt = $con->query($sql);
while ($property = mysqli_fetch_field($resultt)) { //fetch table field name
    echo $property->name."\t";
}

print("\n");    

while($row = mysqli_fetch_row($resultt))  //fetch_table_data
{
    $schema_insert = "";
    for($j=0; $j< mysqli_num_fields($resultt);$j++)
    {
        if(!isset($row[$j]))
            $schema_insert .= "NULL".$sep;
        elseif ($row[$j] != "")
            $schema_insert .= "$row[$j]".$sep;
        else
            $schema_insert .= "".$sep;
    }
    $schema_insert = str_replace($sep."$", "", $schema_insert);
    $schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert);
    $schema_insert .= "\t";
    print(trim($schema_insert));
    print "\n";
}

PHPExcel은 당신의 친구입니다.매우 사용하기 쉽고 매력적으로 작동합니다.

https://github.com/PHPOffice/PHPExcel

당신은 이 API로 시도해봐야 할 것 같습니다.

http://code.google.com/p/php-excel/source/browse/trunk/php-excel.class.php

이와 함께.

Create a quick export from a database table into Excel

Compile some statistical records with a few calculations and deliver
the result in an Excel worksheet

Gather the items off your (web-based) todo list, put them in a
worksheet and use it as a foundation for some more statistics
magic.**

이 코드를 사용해 보십시오.

<?php
    header("Content-type: application/vnd-ms-excel");

    header("Content-Disposition: attachment; filename=hasil-export.xls");

    include 'view-lap.php';
?>

이 코드를 사용해 보세요.

data.sys

    <table border="1">
<tr>
    <th>NO.</th>
    <th>NAME</th>
    <th>Major</th>
</tr>
<?php
//connection to mysql
mysql_connect("localhost", "root", ""); //server , username , password
mysql_select_db("codelution");

//query get data
$sql = mysql_query("SELECT * FROM student ORDER BY id ASC");
$no = 1;
while($data = mysql_fetch_assoc($sql)){
    echo '
    <tr>
        <td>'.$no.'</td>
        <td>'.$data['name'].'</td>
        <td>'.$data['major'].'</td>
    </tr>
    ';
    $no++;
}
?>

엑셀 파일의 코드

수출. 수출.

<?php
// The function header by sending raw excel
header("Content-type: application/vnd-ms-excel");
// Defines the name of the export file "codelution-export.xls"
header("Content-Disposition: attachment; filename=codelution-export.xls");
// Add data table
include 'data.php';
?>

if mysqli 버전

$sql="SELECT * FROM user_details";
$result=mysqli_query($conn,$sql);
if(mysqli_num_rows($result) > 0)
{
    $no = 1;
            while($data = mysqli_fetch_assoc($result))
            {echo '
    <tr>
        <<td>'.$no.'</td>
        <td>'.$data['name'].'</td>
        <td>'.$data['major'].'</td>

    </tr>
    ';
    $no++;

http://codelution.com/development/web/easy-ways-to-export-data-from-mysql-to-excel-with-php/

이 간단한 코드를 사용하여 MySQL에서 Excel로 데이터를 내보낼 수 있습니다.

<?php
include('db_con.php');


$stmt=$db_con->prepare('select * from books');
$stmt->execute();


$columnHeader ='';
$columnHeader = "Sr NO"."\t"."Book Name"."\t"."Book Author"."\t"."Book 
ISBN"."\t";


$setData='';

while($rec =$stmt->FETCH(PDO::FETCH_ASSOC))
{
 $rowData = '';
 foreach($rec as $value)
 {
  $value = '"' . $value . '"' . "\t";
  $rowData .= $value;
 }
 $setData .= trim($rowData)."\n";
}


header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=Book record 
sheet.xls");
header("Pragma: no-cache");
header("Expires: 0");

echo ucwords($columnHeader)."\n".$setData."\n";

?>

여기서 코드를 완성합니다. php export to excel.

John Peter와 Dileep Kura의 게시물은 다른 사람들이 여전히 찾고 있는 경우를 대비하여 제가 생각하는 더 간단하고 깨끗한 솔루션을 개발하는 데 도움이 되었습니다. (저는 실제로 $_SESSION 변수를 사용했기 때문에 데이터베이스 코드를 보여주지 않습니다.)

위의 해결책들은 Excel에서 로드할 때 항상 오류를 일으켰습니다. 확장자가 포맷 유형과 일치하지 않는다는 것입니다.이러한 솔루션 중 일부는 페이지 전체의 데이터를 열로 표시하는 스프레드시트를 만듭니다. 여기서 열 제목을 지정하고 행 아래에 데이터를 나열하는 것이 더 일반적입니다.여기 간단한 해결책이 있습니다.

$filename = "webreport.csv";
header("Content-Type: application/xls");    
header("Content-Disposition: attachment; filename=$filename");  
header("Pragma: no-cache"); 
header("Expires: 0");
foreach($results as $x => $x_value){
    echo '"'.$x.'",' . '"'.$x_value.'"' . "\r\n";
}
  1. .csv로 변경합니다(Excel은 즉시 .xls로 업데이트하며 로드 시 오류가 없습니다).
  2. 쉼표를 구분 기호로 사용합니다.
  3. 데이터의 쉼표를 이스케이프하려면 키와 값을 두 번 따옴표로 묶습니다.
  4. 또한 열 머리글을 추가했습니다.$results그래서 스프레드시트는 훨씬 더 멋져 보였습니다.

다음 코드를 사용해 보십시오.두 개의 값만 업데이트합니다.
1.your_adm_name 2.table_name

 <?php
    $host="localhost";
    $username="root";
    $password="";
    $dbname="your_database_name";
    $con = new mysqli($host, $username, $password,$dbname); 

        $sql_data="select * from table_name";
        $result_data=$con->query($sql_data);
        $results=array();
    filename = "Webinfopen.xls"; // File Name
    // Download file
    header("Content-Disposition: attachment; filename=\"$filename\"");
    header("Content-Type: application/vnd.ms-excel");

    $flag = false;
    while ($row = mysqli_fetch_assoc($result_data)) {
        if (!$flag) {
            // display field/column names as first row
            echo implode("\t", array_keys($row)) . "\r\n";
            $flag = true;
        }
        echo implode("\t", array_values($row)) . "\r\n";
    }
    ?>

이것은 위의 John Peter의 답변에 근거한 것입니다.코드는 완벽하게 작동하지만 워드프레스를 위해 필요했습니다.그래서 저는 다음과 같은 일을 했습니다.

<?php

require '../../../wp-load.php';

$file_name = "registered-users";
$args = array( 'role' => 'client',
   'meta_query' => array( array(
       'key' => '_dt_transaction_archived',
       'compare' => 'NOT EXISTS'
   ) ),
   'order' => 'DESC',
   'orderby' => 'ID'
);
$users = get_users( $args );
$file_ending = "xls";

// Header info for browser
header( "Content-Type: application/xls" );
header( "Content-Disposition: attachment; filename=$file_name.$file_ending" );
header( "Pragma: no-cache" );
header( "Expires: 0" );

/*******Start of Formatting for Excel*******/

// define separator (defines columns in excel & tabs in word)
$sep = "\t"; //tabbed character
// start of printing column names as names of MySQL fields

print( "First Name" . $sep );
print( "Last Name" . $sep );
print( "E-Mail" . $sep );
print( "\n" );
// end of printing column names

// start foreach loop to get data
$schema_insert = "";

foreach ($users as $user) {
    if ( $user ) {
        $schema_insert = "$user->first_name" . $sep;
        $schema_insert .= "$user->last_name" . $sep;
        $schema_insert .= "$user->user_email" . $sep;
        print "\n";
        $schema_insert = str_replace( $sep . "$", "", $schema_insert );
        $schema_insert = preg_replace( "/\r\n|\n\r|\n|\r/", " ", $schema_insert );
        $schema_insert .= "\t";
        print( trim( $schema_insert ) );
    }
}

언급URL : https://stackoverflow.com/questions/15699301/export-mysql-data-to-excel-in-php

반응형