Edellinen koodivinkkini käsitteli excelistä hakemista, eli SELECT-lauseen suorittamista odbc-yhteyden kautta. Voit katsoa kyseisen vinkin tästä:
https://www.ohjelmointiputka.net/koodivinkit/24461-php-odbc-excel-tietokanta
Uusin koodivinkki käsittelee excel-tiedostoon kirjoittamista käyttäen samanlaista odbc-yhteysstringiä + excel-tiedostoa. Huomattavaa kirjoittamisessakin on, että sarakkeille on annettava itse nimet - eli ensimmäiselle riville on sisällytettävä sarakenimet. Lisäksi taulun (sheet) nimen perään on sql-lauseissa laitettava merkki $.
Nyt koodi:
<?php
// Käyttäjänimi + pwd=salasana (valinnaiset)
$UserName = "";
$PWD = "";
// yhdistettävän excel-tiedoston nimi (laita polku eteen jos ei sijaitse oletushakemistossa, kts. oletushakemisto DSN-stringistä)
$TPideFile = "TiedostoNimi.xls";
// DSN-string, yhdistää odbc:n kautta xls-tiedostoon
// Huomioi erona SELECT-lauseen suoritukseen ReadOnly=0;
$DSN = "DRIVER={Microsoft Excel Driver (*.xls)};
DBQ=".$TPideFile.";UserCommitSync=Yes;
Threads=3;
SafeTransactions=0;
PageTimeout=5;
MaxScanRows=8;
ReadOnly=0;
MaxBufferSize=2048;
DriverId=281;
DefaultDir=C:\Ohjelmatiedostot\Apache Group\Apache\htdocs";
// Yhteys tiedostoon avataan
$Conn = @odbc_connect($DSN, $UserName, $PWD);
// Taulun nimi (Sheet name)
$TauluNimi = "Taul1";
// Arvot jotka sijoitetaan uuteen tiedostoon (nämähän voidaan hakea mistä tahansa, esimerkiksi formista)
$Arvo1 = "Tulee sarakkeeseen A";
$Arvo2 = "Tulee sarakkeeseen B";
$Arvo3 = "Tulee sarakkeeseen C";
// Varsinainen sql-lause, kts. muuttujien arvot edellä
// Tässä tiedostoon on kirjoitettu 1. riville kirjaimet a,b,c (eli sarakkeille nimet)
$sql = "INSERT INTO [".$TauluNimi."$] (A,B,C) VALUES
('".$Arvo1."','".$Arvo2."','".$Arvo3."')";
// Suoritetaan insert-lause $Conn-yhteyden kautta
if ($res=odbc_exec($Conn,$sql)) {
odbc_free_result($rowRes);
} else {
// Livautetaan ruutuun virhe jos ei toimi
echo 'Tiedosto on joko "vain luku" -
tyyppiä tai sitä ei voi muuten avata.
Mahdollisesti sql-lauseessa on jotakin
vikaa (tällöin tiedoston avaaminen on
ok)';
die(); }
?>Tämä olisi varmaan mennyt tuon ensimmäisen vinkkisi toisena listauksena, varsinkin kun näyttää siltä, että tätä ei julkaista...
Aihe on jo aika vanha, joten et voi enää vastata siihen.