Hallo,
meine Buchhalterin hat sich nach meiner Umstellung auf Heidelpay ohne eFire darüber beschwert, dass es keine Datei mehr gibt wo die Bestellnummer mit aufgeführt ist. Ich habe hierzu ein Modul für mein privates Verwaltungstool erstellt, dessen Code ich hier kurz zu Verfügung stellen möchte. Wichtig ist, dass ihr euch PHPExcel in das Verzeichnis kopiert. In meinem aufrufenden Verzeichnis habe ich auch ein Unterverzeichnis mit dem Namen data/… Hier wird die Excel Datei, die man von seinem Rechner aus hochladen kann, hinkopiert. Dort wird sie gelesen, die Transid in der OXORDER herausgesucht und eine neue Excel Datei mit der Bestellnummer und den Inhalten der Eingabedatei erzeugt. Das meiste passiert in der Displayfile() Funktion.
Here it is.
<?
include("include/headercheck.php");
//Excel
/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('Europe/Berlin');
define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');
/** Include PHPExcel */
require_once 'PHPExcel/IOFactory.php';
?>
<html>
<head>
<title>Referenzliste Heidelpay</title>
<link rel="stylesheet" href="styles/styles.css" type="text/css" media="screen">
</head>
<body>
<?php
require("header.php");
require("include/custom.php"); //f¸r Pfadangaben
$error=0;
$error_text="";
?>
<b>Referenzliste Heidelpay</b><br>
<br>
<?php
if(isset($_POST['step']))
{
// Das Formular wurde gesendet
switch($_POST['step'])
{
case 1: $error=checkFile($_FILES['dateiname']['tmp_name'],$error_text);
if(!$error)
$error=copyFile($_FILES['dateiname']['tmp_name'],$custom_data_path,$custom_filename,$error_text);
if(!$error)
{
$error=displayFile($error_text);
$_POST['step']=1;
}
break;
}
//Bei Fehler...
if($error)
{
$_POST['step']=$_POST['step']-1;
}
}
//Eingabeformular
if(!isset($_POST['step'])|| $_POST['step']==0)
{
?>
<!-- Eingabeformular -->
<table border="1" cellspacing="0" cellpadding="0" class="ewizards_bg" width="450">
<form enctype="multipart/form-data" action="<?php echo htmlspecialchars ($_SERVER['PHP_SELF']); ?>" method="post">
<input type="hidden" name="max_file_size" value="<?php print $custom_maxfilesize;?>">
<input type="hidden" name="step" value="1">
<tr>
<td class="rot" colspan="2"><b>Jede Excel-Datei sollte eine Titelzeile enthalten.</b><br>
Aufbau:Datum,Meth.,Inhaber,Betrag,Txn-ID,Debit/Credit<br><br></td>
</tr>
<tr>
<td width="200">.xls Datei auswählen </td><td><input name="dateiname" type="file"></td>
</tr>
<tr>
<td colspan="2" align="right"> <input type="submit" value="Abschicken"></td>
</tr>
</form>
</table>
<?php
//Sofern Fehler aufgetreten ist, hier Meldung mit ausgeben
if($error)
print "<img src=\"images/error.gif\"> ".$error_text;
}
?>
<br>
<?php
require("footer.php");
?>
</body>
</html>
<?php
/*************************************************************
* Funktionen *
*************************************************************/
//checkFile
function checkFile($filename,&$error_text)
{
$error=0; //alles ok
if(trim($filename==""))
{
$error_text=$error_text."Es wurde keine Datei ausgewählt.<br>";
return 1;
}
else
{
return 0;
}
}
//copyFile
function copyFile($filename,$path,$newfilename,&$error_text)
{
$error=0; //alle ok
if(!move_uploaded_file($filename,$path."/".$newfilename))
{
$error=1;
$error_text=$error_text."Fehler beim Hochladen der Datei: ".$filename;
}
return $error;
}
//displayFile
function displayFile(&$errorstring)
{
$error=0; //alles ok
$fname = "data/input.xls"; //Hardcoded - geht auch schöner
//Datei gefunden, jetzt Excel verarbeiten
if (!file_exists($fname))
{
exit("Datei nicht gefunden !" . EOL);
}
//Vorarbeiten zum Einlesen der Eingabedatei in xls
$objReader = PHPExcel_IOFactory::createReader('Excel5');
$objReader->setReadDataOnly(true);
//Ist es eine Excel Datei im Excel5 Format ?
if (!$objReader->canRead($fname))
{
$error=1;
$errorstring="Dateiformat nicht korrekt !";
return 1;
}
$objPHPExcel = $objReader->load($fname);
$objWorksheet = $objPHPExcel->getActiveSheet();
//Neue Excel Datei erzeugen für den Output mit Bestellnummer
$objOutputPHPExcel = new PHPExcel();
$objOutputPHPExcel->setActiveSheetIndex(0);
// Set document properties
$objOutputPHPExcel->getProperties()->setCreator("Schaltauge.de")
->setLastModifiedBy("Christian Berndt")
->setTitle("Ausgabedatei Buchhaltung")
->setSubject("Office 2007 XLSX Document")
->setDescription("Ausgabedatei Buchhaltung Heidelpay - Bestellnummer")
->setCategory("Buchhaltung");
//Ausgabestruktur füllen, Eingabedatei kopieren
$rowCount = 1; // Initialise the Excel row number
$objOutputPHPExcel->getActiveSheet()->setCellValue('A'.$rowCount, "Buchhaltungsdatei erstellt am:".date('d.m.Y H:i'));
$rowCount++;
//Header aus Eingabedaten übernehmen
$objOutputPHPExcel->getActiveSheet()->setCellValue('A'.$rowCount, $objWorksheet->getCell('A1'));
$objOutputPHPExcel->getActiveSheet()->setCellValue('B'.$rowCount, $objWorksheet->getCell('B1'));
$objOutputPHPExcel->getActiveSheet()->setCellValue('C'.$rowCount, $objWorksheet->getCell('C1'));
$objOutputPHPExcel->getActiveSheet()->setCellValue('D'.$rowCount, $objWorksheet->getCell('D1'));
$objOutputPHPExcel->getActiveSheet()->setCellValue('E'.$rowCount, $objWorksheet->getCell('E1'));
$objOutputPHPExcel->getActiveSheet()->setCellValue('F'.$rowCount, "Bestellnummer");
$rowCount++;
//Vorbereitung für Zugriff auf OXORDER
//Datenbankverbindung
global $mysqlhost,$mysqluser,$mysqlpwd, $dbname; //Ausserhalb definiert
$mysqli = new mysqli($mysqlhost,$mysqluser, $mysqlpwd, $dbname);
if ($mysqli->connect_error)
{
die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
//Eingabe - Tabelle durchschleifen
foreach ($objWorksheet->getRowIterator() as $row)
{
$cellIterator = $row->getCellIterator();
// This loops all cells, even if it is not set.
// By default, only cells that are set will be iterated.
$cellIterator->setIterateOnlyExistingCells(false);
$rowIndex = $row->getRowIndex ();
//Transaktionsnummer für Zugriff auf OXORDER
$tsn_ID=$objWorksheet->getCell('E' . $rowIndex); //5. Element
//Diese wollen wir nicht
if($rowIndex>1) //Titelzeile auslassen
{
if(substr_compare($tsn_ID, "oxid", 0, 4))
{
//Nur diese interessieren mich
$qs=("select OXORDERNR from oxorder where OXTRANSID=\"".$tsn_ID."\"");
$mysqli->real_query($qs);
$res = $mysqli->use_result();
//OXorder lesen und Bestellnummer wegschreiben
while ($row = $res->fetch_assoc())
{
$objOutputPHPExcel->getActiveSheet()->setCellValue('A'.$rowCount, $objWorksheet->getCell('A' . $rowIndex));
$objOutputPHPExcel->getActiveSheet()->setCellValue('B'.$rowCount, $objWorksheet->getCell('B' . $rowIndex));
$objOutputPHPExcel->getActiveSheet()->setCellValue('C'.$rowCount, $objWorksheet->getCell('C' . $rowIndex));
$objOutputPHPExcel->getActiveSheet()->setCellValue('D'.$rowCount, $objWorksheet->getCell('D' . $rowIndex));
$objOutputPHPExcel->getActiveSheet()->setCellValue('E'.$rowCount, $objWorksheet->getCell('E' . $rowIndex));
$objOutputPHPExcel->getActiveSheet()->setCellValue('F'.$rowCount, $row['OXORDERNR']);
$rowCount++;
}
}
}
}
$objWriter = PHPExcel_IOFactory::createWriter($objOutputPHPExcel, 'Excel5');
$objWriter->save('data/output.xls');
print "<br>Ausgabedatei erstellt: <a href=\"data/output.xls\"><b>output.xls</b></a><br>";
}
?>