2012-01-31 8 views
3

PHP로 XLS 파일을 가져 오려고합니다. 그런 다음 정보를 편집하여 mySQL으로 가져올 수 있습니다. 나는이 일과 관련된 일을 한 번도 해 본 적이 없으므로 그 일에 어떻게 접근해야 하는지를 파악하는 데 어려움을 겪고있다.PHP로 XLS에서 데이터 편집하기 mySQL로 가져 오기

나는 몇 가지 오픈 소스 프로젝트에서 보았다 :

  • PHP 엑셀 리더
  • ExcelRead
  • PHPExcel 이러한 옵션의

아무도 완벽하게 내가 어쩌면 이렇게하거나 원하는 적합하지를 나는 그 문서에 충분히 깊이 들어가 보지 못했다.

고려해야 할 몇 가지 사항이 있습니다. XLS 파일은 다른 파일 형식으로 변환 할 수 없습니다. 이는 비 기술적 인 사용자가 쉽게 액세스 할 수 있도록하기위한 것입니다. XLS 파일은 매번 동일한 형식 (열)을 갖는 다른 웹 사이트에서 생성되는 보고서입니다. DB를로 가져올 것입니다 무엇보다 XLS 파일에 더 많은 열이있는,

*ID |Email |First Name |Last Name |Paid |Active |State |Country|* 

그러나 : 예를 들어,와 모든 XLS 파일을 열 같은 양의 (이 A1 것)이있다. 예를 들어, 수입되고있는 행 (이 A1 것) :

*ID |Email |First Name |Last Name |Country* 

내가 PHPExcel 같은 A. 사용 뭔가가 데이터를 읽을 것이다 데이터를 편집 할 수있는 두 가지 방법 중 하나를 알고, 편집 그런 다음 DB 또는 B로 보냅니다. PHPExcel과 같은 것을 사용하여 XLS를 CSV로 변환하고, 임시 테이블로 원시 가져 오기를 수행하고, 데이터를 편집 한 다음 이전 테이블에 삽입합니다.

PHPExcel 설명서를 많이 읽었지만 데이터베이스로 가져 오는 데 아무런 문제가 없으며 가져 오기 전후로 XLS를 편집하는 위치를 알지도 못합니다.

저는 많은 키워드를 봤는데 대부분 XLS를 읽고 쓰거나 미리 보는 방법에 대한 결과를 발견했습니다. 나는 적어도 가장 간단한 단계에서 이러한 모든 일을하는 가장 좋은 방법에 대한 조언을 찾고 있습니다.

+0

세 단계 모두에 PHP를 사용합니다. 먼저 PHP 패키지를 사용하여 Excel 데이터를 * 메모리 *로 가져옵니다 (몇 가지 예를 직접 언급 했음). 변수에 저장하고 PHP를 사용하여 원하는대로 조작 할 수 있습니다. 그런 다음 동일한 PHP 스크립트를 사용하여 데이터베이스에 연결하고 새 데이터를 저장합니다. –

+0

PHPExcel은 셀 값을 편집 할 수있는 완벽한 툴 세트를 제공하지만, 통합 문서를 다시 저장하지 않는 한, 왜 셀을 편집하고 MySQL에 삽입하기 전에 추출 된 데이터를 변경하지 않는가? 이 문서에서는 INSERT 문이 많은 다른 문서에서 다루어지기 때문에 데이터를 데이터베이스에 저장하는 방법을 보여주지 않지만 rowIterator 사용을 포함하여 다양한 방법으로 워크 시트에서 데이터를 추출하는 방법을 보여주는 예제가 있습니다. –

+0

@Mark 내가 말했듯이, 비 기술적 인 사용자를 위해, 모든 사람들이 자신의 해석을 가지고 있으며 데이터가 손상되는 방식이므로 통합 문서를 편집하는 것을 원하지 않습니다. –

답변

2

this article on using PHP-ExcelReader을 참조하십시오. 특히 "테이블 회전"단원을 참조하십시오.

당신이 가진 모든 솔루션은 다음과 같이보고 끝날 것입니다 :

  1. 은 XLS에서 행 읽기 (AN XLS 리더를 필요) 데이터베이스에 필요한
  2. 은 행의 데이터를 수정합니다.
  3. 수정 된 데이터를 데이터베이스에 삽입하십시오.

"데이터 편집"에서이 고정 기능이있는 것 같습니다. 이것은 단지 PHP입니다. XLS 리더에서 값을 얻고 PHP 코드로 수정 한 다음 데이터베이스에 삽입합니다. 중간 파일이 없으며 XLS를 수정하지 않습니다. 단지 PHP 일뿐입니다.

작성해야 할 프로그램의 내부 루프에 대한 매우 간단하고 검증되지 않은 예제입니다. 이것은 일반적인 패턴을 설명하기위한 것입니다.

$colsYouWant = array(1,2,3,4,8); 
$sql = 'INSERT INTO data (id, email, fname, lname, country) VALUES (?,?,?,?,?)'; 
$stmt = $pdo->prepare($sql); 

$sheet = $excel->sheets[0]; 
// the excel reader seems to index by 1 instead of 0: be careful! 
for ($rowindex=2; $rowindex <= $sheet['numRows']; $rowindex++) { 
    $xlsRow = $sheet['cells'][$rowindex]; 
    $row = array(); 
    foreach ($colsYouWant as $colindex) { 
     $row[] = $xlsRow[$colindex]; 
    } 
    // now let's "edit the row" 
    // trim all strings 
    $row = array_map('trim', $row); 
    // convert id to an integer 
    $row[0] = (int) $row[0]; 
    // capitalize first and last name 
    // (use mb_* functions if non-ascii--I don't know spreadsheet's charset) 
    $row[2] = ucfirst(strtolower($row[2])); 
    $row[3] = ucfirst(strtolower($row[3])); 

    // do whatever other normalization you want to $row 

    // Insert into db: 
    $stmt->execute($row); 
} 
+0

내 고정은 입력 전에 행을 편집하는 방법에 대한 잘 작성된 자습서를 찾을 수 없다는 사실에 근거합니다. 그 기사는 제가 발견 할 수 있었던 것보다 더 자세하게 보입니다. –

+1

PHP를 아는 경우 입력 전에 행을 편집하는 방법을 알고 있습니다. 예 : '$ valueForDb = trim ($ cellFromXls)'. 거기, 당신은 방금 편집했습니다. –

+0

셀 단위로 편집하고 싶지 않습니다. 행 단위로 편집하고 싶습니다. 그리고 셀이나 레코드 대신 행을 호출하는 방법에 대한 설명서를 찾을 수 없습니다. 나는 나의 원래 게시물에서 그것을 설명했다고 생각했다. 나는 PHP를 안다, 그것은 문제가 아니다. 문제는 in I. I.E입니다. XLS 리더 나는 심지어 그것이 행에 의해 불릴 수 있는지 명확하지 않다. –

관련 문제