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.
[PHP]
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 &generateConten t($type) { // STATIC STRING METHOD
$result = $this->getResult();
switch (strtolower($ty pe)) {
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(strtolow er($type), 'csv') != 0) $content =
'<table><tr>';
if ($result) $content .= $this->generateHeader s($type) . $lb;
$isFirstRow = true; $isEndOfFirstRo w = true;
for ($i = 0; $i < @sizeof($result ); $i++) {
$header = @array_keys(get _object_vars($r esult[$i]));
if (strcmp(strtolo wer($type), 'csv') != 0 && $isFirstRow) {
$isFirstRow = false;
$field = '<td valign="top">';
}
for ($j = 0; $j < @sizeof($header ); $j++) {
if (strcmp(strtolo wer($type), 'csv') == 0) {
$field .= '"' . nl2br(preg_repl ace('/\r/', "\n",
preg_replace('/[\t]/', ' ', str_replace('"' , '"',
$result[$i]->$header[$j])))) . '"';
} else {
$field .= nl2br(preg_repl ace('/\r/', "\n", preg_replace('/[\t]/',
' ', $result[$i]->$header[$j])));
}
$content .= $field . $delimiter;
$field = '';
}
if (strcmp(strtolo wer($type), 'csv') != 0 && $isEndOfFirstRo w) {
$isEndOfFirstRo w = false;
$content = preg_replace('/<td valign="top">$/', '', $content);
}
$content .= $lb;
$field = '';
$isFirstRow = true; $isEndOfFirstRo w = true;
}
if ($result && strcmp(strtolow er($type), 'csv') != 0) $content =
preg_replace('/<tr>$/', '', $content) . '</table>';
return $content;
}
}
[/PHP]
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
views it as a single-column spreadsheet with everything in quotes,
whereas OpenOffice Calc views it as a legitimate spreadsheet in
separate columns/cells.
[PHP]
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 &generateConten t($type) { // STATIC STRING METHOD
$result = $this->getResult();
switch (strtolower($ty pe)) {
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(strtolow er($type), 'csv') != 0) $content =
'<table><tr>';
if ($result) $content .= $this->generateHeader s($type) . $lb;
$isFirstRow = true; $isEndOfFirstRo w = true;
for ($i = 0; $i < @sizeof($result ); $i++) {
$header = @array_keys(get _object_vars($r esult[$i]));
if (strcmp(strtolo wer($type), 'csv') != 0 && $isFirstRow) {
$isFirstRow = false;
$field = '<td valign="top">';
}
for ($j = 0; $j < @sizeof($header ); $j++) {
if (strcmp(strtolo wer($type), 'csv') == 0) {
$field .= '"' . nl2br(preg_repl ace('/\r/', "\n",
preg_replace('/[\t]/', ' ', str_replace('"' , '"',
$result[$i]->$header[$j])))) . '"';
} else {
$field .= nl2br(preg_repl ace('/\r/', "\n", preg_replace('/[\t]/',
' ', $result[$i]->$header[$j])));
}
$content .= $field . $delimiter;
$field = '';
}
if (strcmp(strtolo wer($type), 'csv') != 0 && $isEndOfFirstRo w) {
$isEndOfFirstRo w = false;
$content = preg_replace('/<td valign="top">$/', '', $content);
}
$content .= $lb;
$field = '';
$isFirstRow = true; $isEndOfFirstRo w = true;
}
if ($result && strcmp(strtolow er($type), 'csv') != 0) $content =
preg_replace('/<tr>$/', '', $content) . '</table>';
return $content;
}
}
[/PHP]
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
Comment