在我想到这个问题之前,我们会问这个问题,但他们并没有帮助我。 所以,我别无选择。
我使用laravel导出.CSV文件中的数据。
我所做的就是这样 -
$tweets = DB::select(DB::raw($query));
foreach ($tweets as $row)
{
$row = get_object_vars($row);
// iterate over each tweet and add it to the csv
$output .="col 11"; //Col 1 item
$output .="\t"; //Adding New tab
$output .="col 12"; //Col 2 item
$output .="\n"; //Adding New Line
}
$headers = array(
'Content-Type' => 'text/csv',
'Content-Disposition' => 'attachment;filename="'.Carbon\Carbon::now()->toDateTimeString().'.csv"',
);
return Response::make(rtrim($output, "\n"), 200, $headers);
因此,要手动添加标签,我所做的就是
$ output。=" \ t";
我得到的是这样的东西 -
但我希望有类似的东西 -
有人可以帮我吗?
答案 0 :(得分:1)
正确的CSV要求,分隔符和任何字段,"或者空格需要用双引号括起来,字段中出现的任何双引号都需要加倍,两个连续的双引号被视为转义双引号。
可以使用非标准分隔符,但需要在客户端应用程序上进行配置,而标准CSV格式则不需要。 Excel具有文本到数据,可让您配置分隔符,引用字符等。数字很难用,或者至少我很难让Numbers试图让它正确打开非标准的CSV。
控制器类中包含的csv()函数仅用于测试。将其移出或排成一行。代码将包装它需要的任何东西,并将在字段中处理嵌入式\ n。在excel /数字上,它们成为多行文本单元格。
public static
function csv($row)
{
$csvRow = '';
foreach ($row as $col)
{
$val = str_replace('"', '""', $col);
if (preg_match('/"|,|\s|\n/', $val))
{
$val = "\"$val\"";
}
$csvRow .= ',' . $val;
}
return substr($csvRow, 1) . "\n";
}
public
function getTest()
{
if (!appDebug()) return App::Abort(404);
$tweets = DB::select('SELECT transLine, transID, transLang, transValue FROM utils.translations LIMIT 20');
$output = '';
foreach ($tweets as $tweet)
{
// output header row, optional
// if (!$output) $output = self::csv(array_keys(get_object_vars($tweets[0])));
$row = get_object_vars($tweet);
$output .= self::csv($row);
}
$headers = array(
'Content-Type' => 'text/csv',
'Content-Disposition' => 'attachment;filename="' . Carbon\Carbon::now()->toDateTimeString() . '.csv"',
);
return Response::make(rtrim($output, "\n"), 200, $headers);
}