I am using PHP 4.3.2 to create a CSV file, however, Excel constantly views it as a single-column spreadsheet with everything in quotes, whereas OpenOffice Calc views it as a legitimate spreadsheet in separate columns/cells.
class ReportGenerator {
/**
* Generate content based upon type
*
* @access private
* @param mixed $type type of content (e.g. Excel, CSV, Word, etc)
* @return mixed formatted content
*/
function &generateContent($type) { // STATIC STRING METHOD
$result = $this->getResult();
switch (strtolower($type)) {
case 'excel':
$delimiter = '</td><td valign="top">';
$lb = "\n</tr>\n<tr>";
break;
case 'csv':
$delimiter = ',';
$lb = "\n";
break;
default: // DO NOTHING
break;
}
if ($result && strcmp(strtolower($type), 'csv') != 0) $content = '<table><tr>';
if ($result) $content .= $this->generateHeaders($type) . $lb;
$isFirstRow = true; $isEndOfFirstRow = true;
for ($i = 0; $i < @sizeof($result); $i++) {
$header = @array_keys(get_object_vars($result[$i]));
if (strcmp(strtolower($type), 'csv') != 0 && $isFirstRow) {
$isFirstRow = false;
$field = '<td valign="top">';
}
for ($j = 0; $j < @sizeof($header); $j++) {
if (strcmp(strtolower($type), 'csv') == 0) {
$field .= '"' . nl2br(preg_replace('/\r/', "\n", preg_replace('/[\t]/', ' ', str_replace('"', '"', $result[$i]->$header[$j])))) . '"';
} else {
$field .= nl2br(preg_replace('/\r/', "\n", preg_replace('/[\t]/', ' ', $result[$i]->$header[$j])));
}
$content .= $field . $delimiter;
$field = '';
}
if (strcmp(strtolower($type), 'csv') != 0 && $isEndOfFirstRow) {
$isEndOfFirstRow = false;
$content = preg_replace('/<td valign="top">$/', '', $content);
}
$content .= $lb;
$field = '';
$isFirstRow = true; $isEndOfFirstRow = true;
}
if ($result && strcmp(strtolower($type), 'csv') != 0) $content = preg_replace('/<tr>$/', '', $content) . '</table>';
return $content;
}
}
This class contains a method that will generate the CSV-formatted content, however, it again fails to produce legitimate content in Excel while producing just-fine content in OpenOffice.
Help!
Thanx
Phil