2011-02-05 80 views
1

我使用下面的这个函数来处理从我的db中检索的数组数据,然后将这些数据导出到Excel中。在导出到Excel之前将数据转换为表格格式

# feed the final items to our formatting function... 
$contents = get_excel_data($items); 

function get_excel_data($items){ 

    # set the variable 
    $output = null; 

    # check if the data is an items and is not empty 
    if (is_array($items) && !empty($items)) 
    { 
     # start the row at 0 
     $row = 0; 

     # loop the items 
     # "foreach(array_values($data) as $item)" is too complicated. "foreach($data as $item)" will suffice. 
     # foreach(array_values($items) as $item) 
     foreach($items as $item) 
     { 
      if (is_array($item) && !empty($item)) 
      { 
       if ($row == 0) 
       { 
        # write the column headers 
        $output = implode("\t",array_keys($item)); 
        $output .= "\n"; 
       } 
        # create a line of values for this row... 
        $output .= implode("\t",array_values($item)); 
        $output .= "\n"; 

        # increment the row so we don't create headers all over again 
        $row++; 
      } 
     } 
    } 

    # return the result 
    return $output; 
} 

它处理输出像下面这样,

cat_id cat_name cat_order cat_hide cat_important cat_created cat_updated 
1 Primary image 1 0 1 0000-00-00 00:00:00 2011-01-17 17:26:51 
2 Secondary image 2 0 1 0000-00-00 00:00:00 2011-01-17 17:27:01 
3 Tertiary image 3 0 1 0000-00-00 00:00:00 2010-10-08 20:03:56 
4 Quartary image 4 0 1 0000-00-00 00:00:00 2010-10-08 20:03:56 

但最好我想包装在这样的表中的输出,

<table border="1"> 
<tr> 
<th>cat_id</th> 
<th>cat_name</th> 
<th>cat_order</th> 
<th>cat_hide</th> 
<th>cat_important</th> 
<th>cat_created</th>  
<th>cat_updated</th> 
</tr> 

<tr> 
<td>1</td> 
<td>Primary image</td> 
<td>1</td> 
<td>0</td> 
<td>1</td> 
<td>0000-00-00 00:00:00</td>  
<td>2011-01-17 17:26:51</td> 
</tr> 

<td>2</td> 
<td>Secondary image</td>  
<td>2</td> 
<td>0</td> 
<td>1</td> 
<td>0000-00-00 00:00:00</td>  
<td>2011-01-17 17:26:51</td> 
</tr> 
... 
</table> 

任何想法我应该加入到原始代码输出上面的表格?

我尝试了以下版本的修改,但失败了!

function get_excel_data($items){ 

    # set the variable 
    $output = null; 

    # check if the data is an items and is not empty 
    if (is_array($items) && !empty($items)) 
    { 
     # start the row at 0 
     $row = 0; 

     # loop the items 
     # "foreach(array_values($data) as $item)" is too complicated. "foreach($data as $item)" will suffice. 
     # foreach(array_values($items) as $item) 
     foreach($items as $key => $value) 
     { 

       if ($row == 0) 
       { 
        /* 
        # write the column headers 
        $output = implode("\t",array_keys($item)); 
        $output .= "\n"; 
        */ 

        $output = '<table border="1"><tr>'; 
        $output .= '<th>'.$key.'</th>'; 
        $output .= '</tr>'; 
       } 
        /* 
        # create a line of values for this row... 
        $output .= implode("\t",array_values($item)); 
        $output .= "\n"; 
        */ 

        $output .= '<tr>'; 
        $output .= '<td>'.$value.'</td>'; 

        $output .= '</tr>'; 


       if ($row == 0) 
       { 
        $output .= '</table>'; 
       } 

        # increment the row so we don't create headers all over again 
        $row++; 

     } 
    } 

    # return the result 
    return $output; 
} 

谢谢。

+1

为什么不创建一个真正的Excel文件,而不是试图假装制表符分隔文件或HTML文件是Excel文件? – 2011-02-05 16:09:10

+0

'为什么不创建一个真正的Excel文件' - 你的意思是使用Microsoft Excel创建Excel文件? – laukok 2011-02-05 16:14:55

回答

1

这是您的功能上未经测试的变体,可能会起作用。

# feed the final items to our formatting function... 
$contents = get_excel_data($items); 

function get_excel_data($items){ 

    # set the variable 
    $output = null; 

    # check if the data is an items and is not empty 
    if (is_array($items) && !empty($items)) 
    { 
     # start the row at 0 
     $row = 0; 

     $output = '<table border="1">' 

     # loop the items 
     # "foreach(array_values($data) as $item)" is too complicated. "foreach($data as $item)" will suffice. 
     # foreach(array_values($items) as $item) 
     foreach($items as $item) 
     { 
      if (is_array($item) && !empty($item)) 
      { 
       if ($row == 0) 
       { 
        $output .= '<tr>'; 
        foreach(array_keys($item) as $header) 
        { 
         $output .= '<th>'.$header.'</th>'; 
        } 
        $output .= '</tr>'; 
       } 

       $output .= '<tr>'; 
       foreach(array_values($item) as $cell) 
       { 
        $output .= '<td>'.$cell.'</td>'; 
       } 
       $output .= '</tr>'; 

       # increment the row so we only create headers once 
       $row++; 
      } 
     } 
     $output .= '</table>'; 
    } 

    # return the result 
    return $output; 
}