PHPExcelオブジェクトにロードしたものだけが新しいファイルに配置されます。
createWriterは編集ファイルではなく、シートを保持、それだけであなたは、あなたがそれを与えるファイル名に渡すかの新しいコピーを書くのです。この場合、読み込んだファイルと同じファイルなので、ファイルを上書きします。したがって、最初にワークブック全体を取得し、次にワークシート全体から必要なものを変更するように注意する必要があります。その後、新しい変更を加えてすべてをファイルに書き出します。
次のコードは、他のシートを保持するのに役立ちます。特定のシートだけを編集するには、編集したいシート名を$ editable_worksheets配列に配置します。私はコメントをよく説明していましたので、うまくいけば、これがどのように行われたかを段階的に明確にします。
// Load your PHPExcel class
require_once 'classes/PHPExcel/Classes/PHPExcel.php';
// Set variables for file location and type to make code more portable and
// less memory intensive
$file = '/tmp/ac.xlsx';
$file_type = 'Excel2007';
// Open file for reading
$objReader = PHPExcel_IOFactory::createReader($file_type);
// Take all exisiting worksheets in open file and place their names into an array
$worksheet_names = $objReader->listWorksheetNames($file);
// Array of worksheet names that should be editable
$editable_worksheets = array('activity', 'store');
// You will need to load ALL worksheets if you intend on saving to the same
// file name, so we will pass setLoadSheetsOnly() the array of worksheet names
// we just created.
$objReader->setLoadSheetsOnly($worksheet_names);
// Load the file
$objPHPExcel = $objReader->load($file);
// Loop through each worksheet in $worksheet_names array
foreach($worksheet_names as $worksheet_name) {
// Only edit the worksheets with names we've allowed in
// the $editable_worksheets array
if(in_array($worksheet_name, $editable_worksheets)) {
// Take each sheet, one at a time, and set it as the active sheet
$objPHPExcel->setActiveSheetIndexByName($worksheet_name);
// Grab the sheet you just made active
$sheet = $objPHPExcel->getActiveSheet();
// Grab the highest row from the current active sheet
$max_row = $sheet->getHighestRow();
// Set the value of column "A" in the last row to the text "Data"
$sheet->setCellValue("A" . $max_row, "Data");
}
// Foreach loop will repeat until all sheets in the workbook have been looped
// through
}
// Unset variables to free up memory
unset($worksheet_names, $worksheet_name, $sheet, $max_row);
// Prepare to write a new file
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, $file_type);
// Tell excel not to precalculate any formulas
$objWriter->setPreCalculateFormulas(false);
// Save the file
$objWriter->save($file);
// This must be called before unsetting to prevent memory leaks
$objPHPExcel->disconnectWorksheets();
// Again, unset variables to free up memory
unset($file, $file_type, $objReader, $objPHPExcel);
こんにちはマーク、提案のためのおかげで..私は同じprobleamに直面しています...あなたはそれが行われる必要がありますどのように「あなたはiPodにすべての4つのワークシートを必要とする」ことを、あなたのソリューションの最後の行に書いています? – Denish
可能であれば、私にコードを提供してください...それは私にとって非常に緊急です....事前にたくさんありがとう:)) – Denish