Разница между текстовым файлом с разделителями табуляции, сгенерированным PHP и Excel

Я в некотором роде, когда мой клиент должен импортировать текстовый файл с разделителями табуляции в свою систему (FIAdmin SCS). К сожалению, клиент и группа поддержки программного обеспечения ничего не знают о PHP. Они продолжают получать ошибки, что файл в неправильном формате.

Я генерирую файлы из БД следующим образом:

    $fp = fopen("file.txt", "w");
foreach ($results as $key=>$res) {
$put[$key][1] = "DOT"; //Third party administrator
$put[$key][2] = ""; //Empty
$put[$key][3] = 10030; //Dealer number
$put[$key][4] = trim($res["keyfob_nr"]); //Contract number
$put[$key][5] = ""; //Empty
$put[$key][6] = ""; //Empty
$put[$key][7] = ""; //Empty
$put[$key][8] = ""; //Empty
$put[$key][9] = ""; //Empty
$put[$key][10] = trim($res["first_name"]);
$put[$key][11] = trim($res["last_name"]);
$put[$key][12] = ""; //Empty
$put[$key][13] = ""; //Empty
$put[$key][14] = trim($res["address"]);
$put[$key][15] = trim($res["city"]);
$put[$key][16] = trim($res["state"]);
$put[$key][17] = trim($res["zip"]);
$put[$key][18] = ""; //Empty
$put[$key][19] = ""; //Empty
$put[$key][20] = ""; //Empty
$put[$key][21] = ""; //Empty
$put[$key][22] = ""; //Empty
$put[$key][23] = ""; //Empty
$put[$key][24] = trim($res["vehicle_odometer"]);
$put[$key][25] = ""; //Empty
$put[$key][26] = ""; //Empty
$put[$key][27] = ""; //Empty
$put[$key][28] = ""; //Empty
$put[$key][29] = trim($res["vehicle_year"]);
$put[$key][30] = trim($res["vehicle_vin"]);
$put[$key][31] = ""; //Empty
$put[$key][32] = ""; //Empty
$put[$key][33] = ""; //Empty
$put[$key][34] = date("n/d/Y"); //Sale date
$put[$key][35] = ""; //Empty - vehicle purchase date
$put[$key][36] = ""; //Empty
$put[$key][37] = ""; //Empty
$put[$key][38] = ""; //Empty
$put[$key][39] = ""; //Empty - auto code (only if no VIN is provided)
$put[$key][40] = ""; //Lien Holder number
$put[$key][41] = ""; //Empty - reinsurance ID
$put[$key][42] = ""; //Empty
$put[$key][43] = ""; //Empty
$put[$key][44] = ""; //Empty
$put[$key][45] = ""; //Empty
$put[$key][46] = ""; //Empty - cancel check number
$put[$key][47] = date("n/d/Y"); //Empty - vehicle in service date (only for new cars)
$put[$key][48] = ""; //Empty
$put[$key][49] = ""; //Empty
$put[$key][50] = ""; //Empty
$put[$key][51] = ""; //Empty - member id
$put[$key][52] = ""; //Empty - no charge back flag
$put[$key][53] = ""; //Empty - contract entry date
$put[$key][54] = ""; //Empty
$put[$key][55] = trim("K".substr((string)$res["amount"], 0, 1)); //Plan code. REQUIRED
$put[$key][56] = 7; //Rate Book id. REQUIRED
$put[$key][57] = "N"; //New or used. REQUIRED
$put[$key][58] = 0; //Deductible amount. REQUIRED
$put[$key][59] = 0; //Deductible type. REQUIRED
$put[$key][60] = $res["term"] == 3 ? 36 : 60; //Contract Term Months. REQUIRED
$put[$key][61] = 999999; //Contract Term Mileage. REQUIRED
for ($i = 62; $i < 168; $i++) {
if ($i == 139) {
$put[$key][$i] = "SGPY";
}
else {
$put[$key][$i] = " ";
}
}
fputcsv($fp, $put[$key], "\t");
//fwrite($fp, implode("\t", $put[$key]));
}
fclose($fp);

Когда я импортирую файл в Excel, он визуально точно такой же, как и файл примера, который мне дан (пример — файл * .xlsx, который в соответствии с ними работает при экспорте). Я пробовал разные способы, включая использование пробелов вместо пустых строк, fwrite() вместо fputcsv(), \t вместо chr(9), \r\n в конце implode() и так далее. Ни один из них, кажется, не работает.

Единственное отличие, которое я вижу, — это размер файла. Все мои сгенерированные файлы имеют размер 396 байтов, но оригинал составляет ~ 254 байта. Итак, когда у меня закончились идеи … почему файл, сгенерированный PHP, больше? Какую дополнительную информацию это может добавить, что может испортить мою работу?

2

Решение

Из руководства по fputcsv()

Замечания: Если PHP неправильно распознает окончания строк при чтении файлов на компьютере Macintosh или созданных им, включите auto_detect_line_endings Вариант конфигурации во время выполнения может помочь решить проблему.

В зависимости от того, в какой системе вы используете PHP для генерации этих CSV-файлов, и в зависимости от самого входного файла и этой опции конфигурации в PHP, вы можете получить несколько разных результатов.

Следует отметить, что xlsx файлы не разделены запятыми или табуляцией. Вы, безусловно, сможете импортировать файлы CSV в Excel, но в конечном итоге именно Excel может интерпретировать этот импорт. Это может быть проблемой для человека, выполняющего импорт в Excel, и может не иметь ничего общего с PHP. Это также может быть проблема конфигурации сервера под управлением PHP, который генерирует файлы, которые портят весь процесс. Остается неясным, где именно виновник или как его исправить, без более точной информации о шагах, которые воспроизводят проблему.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]