Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

  • Moderators
Δημοσ.

Επανέρχομαι με ενα νέο πρόβλημα!

Θέλω να φτιάξω ενα αρχείο google sheets ή excel, για να κρατάω ενα ιστορικό με κάποιες κινήσεις οι οποιες θα γίνονται import απο ενα csv αρχειο. Το αρχειο καθε φορά θα περιέχει νεες εγγραφές αλλα εγω θελω να γίνονται import μόνο οι νέες, δηλαδη αυτες που δεν θα υπάρχουν στο εξελ μου. Πως θα γινει στο import να κραταω μονο τις νεες; Καθε γραμμη εχει ενα unique ID που μπορει να χρησιμοποιηθει. 

ΥΓ: βγαινει μονο σε csv το εξπορτ και δεν μπορω να το αλλαξω αυτο 

  • Moderators
Δημοσ.
5 λεπτά πριν, masteripper είπε

INSERT INTO.... WHERE ID NOT IN (SELECT ID FROM ExistingRecords)

Σε εξελ ειναι αυτο; που θα το βρω;

Δημοσ.

Μια απλη λυση θα ηταν να κανεις import ολο το αρχειο και μετα να κανεις remove duplicates σε ολες τις στηλες εκτος απο το ID

Απλα σε περιπτωση που ειναι σημαντικο να κρατησεις την υφισταμενη ID και οχι την καινουργια, πρεπει να προσεξεις πως θα ειναι σορταρισμενο το αρχειο πριν το remove duplicates

  • Moderators
Δημοσ.
5 λεπτά πριν, archer100 είπε

Μια απλη λυση θα ηταν να κανεις import ολο το αρχειο και μετα να κανεις remove duplicates σε ολες τις στηλες εκτος απο το ID

Απλα σε περιπτωση που ειναι σημαντικο να κρατησεις την υφισταμενη ID και οχι την καινουργια, πρεπει να προσεξεις πως θα ειναι σορταρισμενο το αρχειο πριν το remove duplicates

Πρεπει να κραταω το υπαρχων γιατι θα προσθεετω μια δυο στειλες εγω. Το θεμα ειναι να μην χρειαζεται να το κανω καθε φορα χειροκινητα. 

Δημοσ.

Μπορει να γινει πολυ ευκολα με Python

Απλα θελει πρεπει να ξερεις πως να τρεξεις το αρχειο και φυσικα να γραφτει ο σχετικος κωδικας (οχι τιποτα ιδιαιτερο, καμια 10-15 γραμμες)

  • Moderators
Δημοσ.
3 λεπτά πριν, archer100 είπε

Μπορει να γινει πολυ ευκολα με Python

Απλα θελει πρεπει να ξερεις πως να τρεξεις το αρχειο και φυσικα να γραφτει ο σχετικος κωδικας (οχι τιποτα ιδιαιτερο, καμια 10-15 γραμμες)

Να το κανω σε python για να βρισκει τις νεες εγγραφες και να κανει import μονο τις νεες; ετσι θα μπορουσα να το βαλω να κατεβαζει και το αρχειο μονο του (αν γινεται)

 

Δημοσ.
1 λεπτό πριν, Spect~ είπε

Να το κανω σε python για να βρισκει τις νεες εγγραφες και να κανει import μονο τις νεες; ετσι θα μπορουσα να το βαλω να κατεβαζει και το αρχειο μονο του (αν γινεται)

 

Ακριβως, θα εισαγει μονο τις νεες. Και φυσικα μπορει να κατεβασει το αρχειο αυτοματα απο καποιο σαιτ με λιγο κωδικα ακομα

  • Thanks 1
  • Moderators
Δημοσ.
1 λεπτό πριν, archer100 είπε

Ακριβως, θα εισαγει μονο τις νεες. Και φυσικα μπορει να κατεβασει το αρχειο αυτοματα απο καποιο σαιτ με λιγο κωδικα ακομα

Ναι προγραμματιστικα φυσικα και γινεται αλλα αναφέρομαι στο κομματι της συνδέσεις στη σελιδα ή αν πχ το λινκ ειναι καθε φορα το ιδιο κλπ.

Απο την αλλη γιατι να μην γινει απευθειας σε VBA? Εκτος απο τις δυνατότητες και ευκολιες που σου δινει η python το να εχεις απλα ενα αρχειο και να το τρεχεις απο εκει 

Δημοσ.
1 λεπτό πριν, Spect~ είπε

Ναι προγραμματιστικα φυσικα και γινεται αλλα αναφέρομαι στο κομματι της συνδέσεις στη σελιδα ή αν πχ το λινκ ειναι καθε φορα το ιδιο κλπ.

Απο την αλλη γιατι να μην γινει απευθειας σε VBA? Εκτος απο τις δυνατότητες και ευκολιες που σου δινει η python το να εχεις απλα ενα αρχειο και να το τρεχεις απο εκει 

Φυσικα μπορει να γινει και σε VBA 

Απλα δεν γνωριζω προσωπικα VBA για να γνωμοδοτησω 

  • Like 1
Δημοσ.

Μιας και είσαι Excel και δεν έχει πρόσβαση σε queries θα κανεις εισαγωγή το CSV με VBA σε 1 προσωρινό sheet...θα φορτώσεις το Υπάρχον φύλλο και το φύλλο του CSV σε 2 ξεχωριστά Recordset και θα κάνεις iterate to 2o Recordset(CSV) και θα ελέγχεις εαν υπαρχει το ID στο 1ο..ειδάλλως AddNew

  • Like 1
  • Moderators
Δημοσ.

Θα το δω αργοτερα αν εχω χρονο και αν εχω καμια αλλη ερωτηση θα επανέλθω! Ευχαριστώ!

Δημοσ.

Αυτό θα σε βοηθήσει

Απλώς παρακολούθησετε και ακολούθησε την λογική του (Δεν χρειάζεται να το αγοράσεις)

 

  • Like 3
Δημοσ.
1 ώρα πριν, Spect~ είπε

Να το κανω σε python για να βρισκει τις νεες εγγραφες και να κανει import μονο τις νεες; ετσι θα μπορουσα να το βαλω να κατεβαζει και το αρχειο μονο του (αν γινεται)

 

Σε Python μπορείς να πάρεις τις υφιστάμενες εγγραφές σε ένα set και μετά να κάνεις update αυτό το set με όλες τις εγγραφές που θέλεις να βάλεις. Επειδή είναι set, θα κρατήσει μόνο τις νέες εγγραφές. Μετά, περνάς το set αυτό σε ένα CSV.

Εάν οι εγγραφές σου αποτελούνται από πολλά πεδία, μπορείς να ορίσεις εσύ μία κλάση “Records” και να υλοποιήσεις τις magic methods που χρησιμοποιεί το set. Χωρίς να το έχω ψάξει, εικάζω πως θα χρησιμοποιεί την `__eq__`.

Εάν μία εγγραφή είναι κάτι απλό, τότε και απλά strings θα κάνουν δουλειά. Εάν μία εγγραφή στηρίζεται μόνο σε ένα πεδίο, π.χ. ID, τότε κάνε το set μόνο με τα IDs και πρόσθεσε στο set μόνο τα εισερχόμενα IDs. 

Δημοσ. (επεξεργασμένο)

Μιας και πιάσαμε την Python

import pandas as pd
import openpyxl

df_source = pd.read_excel("C:\\Temp\Book1.xlsx")
df_csv = pd.read_csv("C:\\Temp\Book2.csv")
df_result =pd.concat([df_source,df_csv]).drop_duplicates(['ID'], keep='last').sort_values(by=['ID']).reset_index(drop=True)
df_result.to_excel("C:\\Temp\Final.xlsx")

και για να μην μπλέκουμε με θεωρητικές εικασίες ... :)

Επεξ/σία από masteripper
  • Like 3

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...