我有一个csv文件,有14列,数百行.有一个标题"sku","category","description","brand"等.
所有数据都已存在,但我正在尝试在CSV中添加一些图像文件名,在某些特定列中 ( "images", "small_image" , "thumnail" ).
标题类型如下所示:
+-----+----------+-------------+-------+-------------+-----------+--------+------+
| sku | category | description | image | small_image | thumbnail | price | color|
+-----+----------+-------------+-------+-------------+-----------+--------+------+
Run Code Online (Sandbox Code Playgroud)
所以知道标题的样子,然后第一行就像:
+-------+---------------+------------------+---+---+----+-----+--------+
| sku01 | category name | description here | | | | 99$ | black |
+-------+---------------+------------------+---+---+----+-----+--------+
Run Code Online (Sandbox Code Playgroud)
jpeg的文件名sku与同一行的值相同,带有jpeg扩展名.因此,举例来说,如果sku01对sku第一行栏,文件名是sku01.jpeg在同一行中的图像列.那么small_image值和缩略图值也是如此.
但是,只有在jpeg存在于文件夹中时才会指定文件名.
到目前为止我知道如何使用fopen函数打开csv文件,最终将所有数据存储在一个数组中(我不知道这对我的情况是否有帮助),然后在检查file_exist之后是否在某些时候使用fputcsv函数在服务器上的特定文件夹中.
但是,对我而言,就我应该使用这些功能的顺序而言,我脑子里还是一团糟.我被卡住了.此外,我不知道如何将jpeg文件名放在右列(图像,缩略图,small_image),因为这些列位于csv文件的"中间",以及其他列.它们不在csv文件的末尾
我真的很感谢任何可以让我走上正确道路的人.
我正在尝试将一些数据输入到一个 csv 文件中并且它运行良好,但是如果我尝试添加数据表的标题,Excel 将不会让我打开该文件,因为“文件格式和扩展名。 csv 不匹配。文件可能已损坏或不安全”。
这是代码:
//crate headers
$headers[] = "ID";
$headers[] = "Name";
$headers[] = "Ref";
$headers[] = "Quantity";
// crete and open file
$csvName = "file.csv";
$fileHandle = fopen($csvName, 'w') or die('Can\'t create .csv file, try again later.');
//Add the headers, if I take this line out the excel allows me to open the file
fputcsv($fileHandle,$headers,";");
//Add the data
for($i = 0; $i < count($info); ++$i) {
fputcsv($fileHandle,$info[$i],";");
}
//close file
fclose($fileHandle);
Run Code Online (Sandbox Code Playgroud)
编辑:
这是我用记事本打开的 csv 的第一行:
ID;名称;参考;数量 …
我正在处理导出到 csv 工作表的要求,其工作正常的数据正在导出到 CSV 工作表,但所有数据包括工作表顶部每列的标题和作为普通文本导出的普通数据。我在这里想要的是显然所有的标题都应该是粗体的。是否可以以粗体颜色导出所有标题?
我的代码:
$list[] = 'Title-1,Title-2,Title-3,Title-4'; // I want these titles in bold text
foreach ($result as $ck => $user_data) {
$list[] = $user_data['val-1'] . ',' . $user_data['val-2'] . ',' . $user_data['val-3']. ',' . $user_data['val-4'];
}
ob_clean();
$fileName = 'file_name.csv';
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false);
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment;filename=' . $fileName);
$file = fopen("contacts.csv", "w");
$file = fopen('php://output', 'w');
foreach ($list as $line) {
fputcsv($file, explode(',', $line));
}
fclose($file);
exit; …Run Code Online (Sandbox Code Playgroud) 我正在使用fputcsv来创建一个csv,但是当我在excel中打开它时,它输出的数据在第三行开始.为什么是这样?
我想使用fputcsv创建一行列标题,这是最好的方法.
public function indexAction()
{
$this->outputCSV();
//$this->view->navigation = $navigation = Engine_Api::_()->getApi('menus', 'core')->getNavigation('passport_admin_main', array(), 'passport_admin_main_outofarea');
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
header('Content-Disposition: attachment; filename="OutOfAreaReport.csv"');
header('Content-type: application/excel');
readfile('OutOfAreaReport.csv');
}
public function outputCSV(){
$list = array (
array('aaa', 'saasasbbb', 'ccdddc', 'dddd')
);
$fp = fopen('php://output', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个动态csv文件,以导出到我的网站上的供应商网站.他们希望用双引号括起所有值.我正在尝试创建该行,然后将其提供给fputcsv(),但是当我在notepad2中查看它时它会出现大量的双引号,而在Excel中查看它时会出现1个条目.这是我的价值观:
$line = '"'.$row->petID.'","'.$row->customID.'","'.$row->petName.'","'.trim($row->breedName1).'","'.trim($row->breedName2).'","'.$df->setGender($row->gender).'","'.$df->setSize($row->size).'","'.$df->setAge($row->age).'","'.$description.'","'.$row->pType.'","'.$df->setStatus($row->status).'","","'.$row->isAltered.'","'.$ND.'","'.$NC.'","'.$NK.'","'.$df->isHousetrained($row->housebroken).'","'.$df->isDeclawed($row->declaw).'","'.$df->isSpecialNeeds($row->isSpecial).'","'.$df->isMix($row->breed2).'","'.$PhotoURL1.'","'.$PhotoURL2.'","'.$PhotoURL3.'"';
Run Code Online (Sandbox Code Playgroud)
就像这样使用文本编辑器:"""13651"","""",""jack"",""Chihuahua"",""Pomeranian"",""M"",""S "",""宝贝"","杰克和何塞出生于一个可爱的7磅吉娃娃/波美拉尼亚混合物,他们作为一个流浪者被带到庇护所.他们将在八月中旬为他们的新家断奶.虽然父亲不知道幼崽很可能仍然很小.请访问我们的网站www.dogswithoutborders.org,获取Jack或Jose的在线领养申请,并了解更多有关我们的收养展览会的信息."",""Dog"","A" " "" "", "" 0 "", "" "" "" "", "", "", "" "", "", "", "" "", "" 1 ""," " http://photos.petfinder.com/photos/US/CA/CA1087/20460152/CA1087.20460152-1-x.jpg "","""","""""
当我删除手动添加的"(s)时,我只在开始时获得一个,在结尾时只有一个.任何想法?
当尝试生成 CSV 时,我想将数据分成多列,但我只看到 A1、A2、A3 列中的数据,而不是 b 或 C 中的数据。
有什么办法可以解决这个问题吗?
我希望姓名 X 、年龄 X 和城市 X 位于三个单独的列中
这是一些示例代码:
header("Content-Type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
// Disable caching
header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1
header("Pragma: no-cache"); // HTTP 1.0
header("Expires: 0"); // Proxies
function outputCSV($data) {
$output = fopen($_SERVER['DOCUMENT_ROOT']."/Project_X/trunk/output/test.csv", 'w');
foreach ($data as $row) {
fputcsv($output, $row); // here you can change delimiter/enclosure
}
fclose($output);
}
outputCSV(array(
array("name 1", "age 1", "city 1"),
array("name 2", "age 2", "city 2"),
array("name 3", …Run Code Online (Sandbox Code Playgroud) 我有以下代码;
我正在尝试使用以下代码生成 csv,但它给了我错误:
fputcsv():提供的资源不是有效的流资源
// CSV column headings
$csv = Array
(
"Card #,
Value of Card,
Current balance,
Amount used,
Transaction #,
Transaction Date,
Ship To Name,
Ship To Address 1,
Ship To Address 2,
Ship To Address 3,
Customer Telephone");
$csv [] = "2831013003939663,
0,
$1223.71,
$155.69,
NULL,
02-04-19_05:49:06,
Demo demo,
NULL,
NULL,
NULL,
8108749624";
$file = fopen("contacts.csv","w");
foreach ($csv as $line)
{
fputcsv($file,explode(',',$line));
}
fclose($file);
Run Code Online (Sandbox Code Playgroud)
我在调试中以以下方式获得输出:
**
Array
(
[0] => Card #,Value of Card,Current balance,Amount used,Transaction …Run Code Online (Sandbox Code Playgroud) 所以我查看了 fputcsv 但它似乎替换了整个文件。有没有办法使用 PHP 替换或编辑 CSV 文件中的特定行?我不想上传(作为数组或其他一些数据结构)整个 CSV 编辑上传然后替换或覆盖文件。我想就地编辑 CSV 文件。
例如,如果我的 example.csv 看起来像:
Name Amount Price
Chair 500 20.00
Boat 20 20000.00
Run Code Online (Sandbox Code Playgroud)
我想将椅子的数量替换为 100。我将如何通过编辑 CSV 文件来解决这个问题?我可以在不上传整个文件的情况下做到这一点吗?我避免这样做,因为我认为这将是一个相当大的文件,并且可能会经常发生更改。
我还说上传这可能用词不当,因为这一切都是在服务器端完成的,而不是客户端。