Bästa sätt för excel input/output

Trädvy Permalänk
Avstängd
Plats
Sydney
Registrerad
Nov 2003

Bästa sätt för excel input/output

God afton

Det var 100 år sedan jag försökte mig på liknand projekt men tänkte göra ett försök i helgen och vore kul om jag kunde fixa detta.

Jag behöver skapa en lokal hemsida (lokal index) som kan klara av att läsa en excel fil .csv och sätta upp i kolumner. Strukturen ser ut såhär

(olika värden kommer självklart användas)

Vendor SKU Purchase order raised QTY
abc 123-ABC 123
abc 123-ABC 123
abc 123-ABC 123
abc 123-ABC 123
abc 123-ABC 123
abc 123-ABC 123

Vid sidan om måste det finnas en annan kollumn (Actual QTY) där man via webläsaren kan skriva in en annan siffra. Strukturen ser ut såhär då

Vendor SKU Purchase order raised QTY Actual QTY
abc 123-ABC 123 122
abc 123-ABC 123 122
abc 123-ABC 123 122
abc 123-ABC 123 122

lämpligtvis skall det finnas någon sparaknapp när man har nått slutet, och dessa skall senare läsas in i samma eller en ny .csv fil med samma kolumn namn som sparas lokalt i samma map

HUr skall jag gå tillväga på bästa sätt. Vilket språk måste jag skriva i? Har baskunskaper i html, php och css och kan förstå hur system fungerar.

Förklarar gärna mer om något är oklart, en hjälpande hand som pekar mot tutorials osv är mycket välkommet!

EDIT: ser att min hemmasnickarde tabell blev knas här hoppas ni förstår ändå

Sydney > Sverige
[Those where the days gaming] Ioiny Or-lo - ReDevils n' Fusion for life rip -05 ; Namow - TSA n' ReDevils Jedi rip -05:: rDe Chimaera PvPer! Pre-cu veteran

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Mar 2012

Har ett förslag på hur man kan göra.

Använd Apache POI. Ett api i java för att parsa excell filer. Lätt att plocka ur rader och fält osv.

Använd sedan php's funktion exec för att köra jar-filen.

Har inte så mycket erfarenhet av php så kan inte svara på hur säkert detta är om användaren ger "busig" input när den kör kör jar-filen.

Skickades från m.sweclockers.com

Trädvy Permalänk
Avstängd
Plats
Sydney
Registrerad
Nov 2003
Skrivet av finduze:

Har ett förslag på hur man kan göra.

Använd Apache POI. Ett api i java för att parsa excell filer. Lätt att plocka ur rader och fält osv.

Använd sedan php's funktion exec för att köra jar-filen.

Har inte så mycket erfarenhet av php så kan inte svara på hur säkert detta är om användaren ger "busig" input när den kör kör jar-filen.

Skickades från m.sweclockers.com

Tjena, tack ser ritkigt lovande ut. Vet du hur detta skulle funka på en platta (ipad). Detta blir kanske lite av en följdfråga dock. Måste kanske flytta den från lokalt till online server (resurs finns för detta) för att kunna använda en platta då? Ipads är ju sådär på att tillåta program och insticksmoduler att installeras.

Sydney > Sverige
[Those where the days gaming] Ioiny Or-lo - ReDevils n' Fusion for life rip -05 ; Namow - TSA n' ReDevils Jedi rip -05:: rDe Chimaera PvPer! Pre-cu veteran

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Mar 2012
Skrivet av Jare:

Tjena, tack ser ritkigt lovande ut. Vet du hur detta skulle funka på en platta (ipad). Detta blir kanske lite av en följdfråga dock. Måste kanske flytta den från lokalt till online server (resurs finns för detta) för att kunna använda en platta då? Ipads är ju sådär på att tillåta program och insticksmoduler att installeras.

Tror du är tvungen till det. Om man vill köra den lokalt på en platta är det nog en annan lösning som gäller

Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Maj 2009

hade rekommenderat att inte använda java. chrome supportar inte ens java längre och firefox har stängt av pluginet för det är en osäker del av webläsaren.

du kan göra något liknande som detta (läs mer om fget, fopen etc):

$handle = fopen("inputfile.csv", "r"); if ($handle) { while (($line = fgets($handle)) !== false) { // process the line read. } fclose($handle); } else { // error opening the file. }

Min dator: Silent Base 600 | 1700X @ 3.9Ghz | MSI Gaming X 1080TI | RM750X | 512Gb M2 | 16Gb 3200mhz Ram | S34E790C @ 3440x1440
Tjejens dator: Define r4 | i5 3570k @ 4.2ghz | GTX Titan | 750w Supernova | 240gb SSD | 32gb ram
Citera/Tagga för svar!

Trädvy Permalänk
Avstängd
Plats
Sydney
Registrerad
Nov 2003
Skrivet av Christley:

hade rekommenderat att inte använda java. chrome supportar inte ens java längre och firefox har stängt av pluginet för det är en osäker del av webläsaren.

du kan göra något liknande som detta (läs mer om fget, fopen etc):
$handle = fopen("inputfile.csv", "r");
if ($handle) {
while (($line = fgets($handle)) !== false) {
// process the line read.
}

fclose($handle);
} else {
// error opening the file.
}

Hejsan. Ber om ursäkt för sent svar, alltid för många järn i elden.

Jag förstår dig helt om java. Jag är inne på samma spår.

Gillar ditt upplägg med din kod. Har bara hunnit kika lite med detta kanske kan vara något (behöver tweakas)

<?PHP $file_handle = fopen("inputfile.csv", "r"); while (!feof($file_handle) ) { $line_of_text = fgetcsv($file_handle, 1024); print $line_of_text[0] . $line_of_text[1]. $line_of_text[2] . "<BR>"; } fclose($file_handle); ?>

Sydney > Sverige
[Those where the days gaming] Ioiny Or-lo - ReDevils n' Fusion for life rip -05 ; Namow - TSA n' ReDevils Jedi rip -05:: rDe Chimaera PvPer! Pre-cu veteran

Trädvy Permalänk
Medlem
Registrerad
Okt 2015

Jag har gjort en liknande för jobbet i Java där jag ber kunder skriva in information i ett excel dokument som jag skickat över, sen fyller dom i det som krävs, så parsar jag ut detta till XML filer iof.
Men allt beror på hur du ska göra, ska du hosta sidan själv? Eller ska du ha ett webhotell?
Ska du köra på t.ex. digital ocean hade jag kört maven project och lagt in javaspark som dependency.
Sen hade jag kört:

<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.13</version> </dependency>

Finns säkert en nyare version.

att parsa en fil är fruktansvärt enkelt:

public static void parse(String fileName) { try { FileInputStream fis = new FileInputStream(new File(fileName)); XSSFWorkbook workBook = new XSSFWorkbook(fis); XSSFSheet sheet = workBook.getSheetAt(0); Iterator<Row> rowIterator = sheet.iterator(); // Always skip the first row because it's only information. rowIterator.next(); while(rowIterator.hasNext()) { ArrayList<String> data = new ArrayList<String>(); Row row = rowIterator.next(); Iterator<Cell> cellIterator = row.cellIterator(); while(cellIterator.hasNext()) { Cell cell = cellIterator.next(); data.add(cell.getStringCellValue()); } if(storeData.size() > 0) { XmlClass xml = createXmlClass(data); createXml(xml); } } workBook.close(); fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); System.out.println("There was no file found with that name."); } catch (IOException e) { e.printStackTrace(); }

Typ något sånt, ändrat på lite saker bara för att dölja.
Men detta är för att läsa in, jag har på översta raden bara information så jag skickar den i inläsningen.

Först while loopen går på varje rad. Andra while loopen går igenom alla celler på den aktuella raden.

Lycka till

Trädvy Permalänk
Avstängd
Plats
Sydney
Registrerad
Nov 2003
Skrivet av for_each_while:

Jag har gjort en liknande för jobbet i Java där jag ber kunder skriva in information i ett excel dokument som jag skickat över, sen fyller dom i det som krävs, så parsar jag ut detta till XML filer iof.
Men allt beror på hur du ska göra, ska du hosta sidan själv? Eller ska du ha ett webhotell?
Ska du köra på t.ex. digital ocean hade jag kört maven project och lagt in javaspark som dependency.
Sen hade jag kört:

<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.13</version> </dependency>

Finns säkert en nyare version.

att parsa en fil är fruktansvärt enkelt:

public static void parse(String fileName) { try { FileInputStream fis = new FileInputStream(new File(fileName)); XSSFWorkbook workBook = new XSSFWorkbook(fis); XSSFSheet sheet = workBook.getSheetAt(0); Iterator<Row> rowIterator = sheet.iterator(); // Always skip the first row because it's only information. rowIterator.next(); while(rowIterator.hasNext()) { ArrayList<String> data = new ArrayList<String>(); Row row = rowIterator.next(); Iterator<Cell> cellIterator = row.cellIterator(); while(cellIterator.hasNext()) { Cell cell = cellIterator.next(); data.add(cell.getStringCellValue()); } if(storeData.size() > 0) { XmlClass xml = createXmlClass(data); createXml(xml); } } workBook.close(); fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); System.out.println("There was no file found with that name."); } catch (IOException e) { e.printStackTrace(); }

Typ något sånt, ändrat på lite saker bara för att dölja.
Men detta är för att läsa in, jag har på översta raden bara information så jag skickar den i inläsningen.

Först while loopen går på varje rad. Andra while loopen går igenom alla celler på den aktuella raden.

Lycka till

Tack för riktigt intressant svar. Jag uppskattar att du tog dig tid. Tyvärr är jag inte så hemma i JAVA, jag hann hoppa av min webdesign/programerings program innan vi hann dit för att söka lyckan som ekonom istället

Vad jag kan svara är att intialt är att jag tänkte ha den lokalt. Men efter att ha funderat lite och sett era svar verkar det som att vi får hosta på webhotell. Den resursen finns redan så det är inte några problem.

Det som är den svaga länken är jag tyvärr som inte riktigt har kompetens nog att fullfölja hela vägen ut

Sydney > Sverige
[Those where the days gaming] Ioiny Or-lo - ReDevils n' Fusion for life rip -05 ; Namow - TSA n' ReDevils Jedi rip -05:: rDe Chimaera PvPer! Pre-cu veteran

Trädvy Permalänk
Medlem
Registrerad
Okt 2015

@Jare: Det finns jättebra guider.
Har ni t.ex. ett webbhotell så antar jag att dom inte stödjer java. Så att köra i php är nog enkelt.
För att läsa ur en csv fil kan det gå ganska enkelt till. jag har inte suttit med php på ett tag men kan försöka förklara.

Här är ett exempel:

<?php $row = 1; if (($handle = fopen("test.csv", "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $num = count($data); echo "<p> $num fields in line $row: <br /></p>\n"; $row++; for ($c=0; $c < $num; $c++) { echo $data[$c] . "<br />\n"; } } fclose($handle); } ?>

$row = 1;
Det som händer här är att man sätter markören på den raden man vill läsa in. Vi börjar på 1.

if (($handle = fopen("test.csv", "r")) !== FALSE) {
Detta är ett if-statement, det borde du veta vad det är. Om fopen(file open) inte lyckas öppna filen så blir det falskt och den hoppar inte in i if-statementet. "r" i detta fallet står för read. så att du inte kan skriva till filen utan bara läsa.

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
OM filen finns och den går att öppna, då sparas detta i $handle, $handle använder du sen för att använda dig av funktionen fgetcsv()
Det fgetcsv gör är att den vet hur den ska läsa csv filen. Då $handle innehåller en ström till filen så skickar vi in den där. 1000 står för att den kommer hämta 1000 rader(tror jag), det sista '','') behöver du inte tänka på. Om detta inte lyckas så funkar inte while loopen.
Men så länge det finns rader att hämta så kommer denna raden vara true.

$num = count($data);
Här räknar du hur många fält(kolumner) det finns. För om du hittar 5 kolumner och du kör till 10 så blir det nullpointer exception.

echo "<p> $num fields in line $row: <br /></p>\n";
Här skriver du ut hur många kolumner som finns i raden.

$row++;
Här ökar du raden ett steg, varför den ++ar innan forloopen vet jag inte eftersom den redan är satt till 1. Men den räknar nog med att första raden är information som jag hade i mitt andra exempel i java.

for ($c=0; $c < $num; $c++) {
En for-loop, ganska standard. Sätter $c till 0, för vi börjar på första cellen i plats noll.
För varje cell upp till x antar, som vi hämtade ovanför så ska vi göra detta. När det som står i for-loopen är gjort, kör $c++, dvs gå till nästa cell på samma rad.

echo $data[$c] . "<br />\n";
Skriver ut vad dom står i cellen beroende på vilket nummer $c har på sig.
a b c d
1 2 3 4
är row på 1 och cell på 3 så kommer den skriva ut 4
är row på 0 och cell på 1 kommer den skriva ut b

fclose($handle);
Du måste stänga strömmen till filen efter dig, annars är den öppen och ingen annan kan använda den, eller om du vill öppna en ny ström till filen, kommer inte fungera om du inte stänger den.

Det är bara att börja kötta enkla uppgifter så kommer du snabbt in i det om du kan lite grunder.
Finns jättebra PHP guider på youtube.
Mr1Buying på har jäkligt bra tutorial på svenska.

Trädvy Permalänk
Avstängd
Plats
Sydney
Registrerad
Nov 2003

@for_each_while

Det är därför jag älskar sweclockers community. Det finns människor som ger sådana här utförliga svar. Du tänker precis rätt, tack så hemskt mycket för hur du förklarar med, det är väldigt uppskattat

Skall sätta mig direkt! Återigen, tack för hjälpen!

Sydney > Sverige
[Those where the days gaming] Ioiny Or-lo - ReDevils n' Fusion for life rip -05 ; Namow - TSA n' ReDevils Jedi rip -05:: rDe Chimaera PvPer! Pre-cu veteran

Trädvy Permalänk
Medlem
Registrerad
Okt 2015

@Jare: Tack, kul att du gillar det.
Ett tillägg också. Anledningen till att man sätter $rows utanför while loopen är att när en loop tar slut så "dör" allt inuti. alla variabler resetas.

Det värsta som kan gå fel är att du antingen får ut fel data, eller att du får något error är antagligen för rows står fel. Bara sätta den till en annan siffra och se vad som händer. Lär dig läsa felmeddelanden, det gör att allt går snabbare att lösa.

Testa först, fråga sen, det finns inget som kan gå fel igentligen. Jag kör alltid i en VM miljö på datorn. VirtualBox med Linux på. Då spelar det ingen roll om du tar bort en systemfil eller två, så länge du har en backup image så kan du enkelt backa tillbaka om du nu vill pilla med systemfiler så borde en backup image vara på sin plats