Update app.py
Browse files
app.py
CHANGED
|
@@ -591,10 +591,22 @@ def get_google_sheet():
|
|
| 591 |
return None, None, None
|
| 592 |
|
| 593 |
def get_sheet_data(sheet):
|
| 594 |
-
"""Hämta all data från sheet"""
|
| 595 |
try:
|
| 596 |
-
|
| 597 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 598 |
|
| 599 |
# Konvertera viktiga kolumner till string
|
| 600 |
if 'Account ID' in df.columns:
|
|
@@ -602,9 +614,25 @@ def get_sheet_data(sheet):
|
|
| 602 |
if 'Områdeskod' in df.columns:
|
| 603 |
df['Områdeskod'] = df['Områdeskod'].astype(str)
|
| 604 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 605 |
return df
|
| 606 |
except Exception as e:
|
| 607 |
st.error(f"❌ Fel vid hämtning av data: {e}")
|
|
|
|
| 608 |
return None
|
| 609 |
|
| 610 |
def validate_password(df, password):
|
|
@@ -935,12 +963,19 @@ def batch_update_cells_with_tracking(sheet, changes, df, editor_email, log_sheet
|
|
| 935 |
if col_name in headers:
|
| 936 |
col_idx = headers.index(col_name) + 1
|
| 937 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 938 |
# Lägg till huvuduppdateringen
|
| 939 |
updates.append({
|
| 940 |
'range': f'{gspread.utils.rowcol_to_a1(sheet_row, col_idx)}',
|
| 941 |
-
'values': [[
|
| 942 |
})
|
| 943 |
-
print(f"[DEBUG] Förbereder uppdatering: {col_name} rad {sheet_row} till '{
|
| 944 |
|
| 945 |
if not updates:
|
| 946 |
return False, "❌ Inga giltiga uppdateringar att utföra"
|
|
|
|
| 591 |
return None, None, None
|
| 592 |
|
| 593 |
def get_sheet_data(sheet):
|
| 594 |
+
"""Hämta all data från sheet med korrekt hantering av textformat"""
|
| 595 |
try:
|
| 596 |
+
# Använd get_all_values() istället för get_all_records()
|
| 597 |
+
# för att få RAW text utan automatisk typkonvertering
|
| 598 |
+
all_values = sheet.get_all_values()
|
| 599 |
+
|
| 600 |
+
if not all_values or len(all_values) < 2:
|
| 601 |
+
st.error("❌ Sheetet är tomt eller har ingen data")
|
| 602 |
+
return None
|
| 603 |
+
|
| 604 |
+
# Första raden är headers
|
| 605 |
+
headers = all_values[0]
|
| 606 |
+
data_rows = all_values[1:]
|
| 607 |
+
|
| 608 |
+
# Skapa DataFrame
|
| 609 |
+
df = pd.DataFrame(data_rows, columns=headers)
|
| 610 |
|
| 611 |
# Konvertera viktiga kolumner till string
|
| 612 |
if 'Account ID' in df.columns:
|
|
|
|
| 614 |
if 'Områdeskod' in df.columns:
|
| 615 |
df['Områdeskod'] = df['Områdeskod'].astype(str)
|
| 616 |
|
| 617 |
+
# Speciell hantering för Telefon-kolumnen: ta bort apostrof-prefix
|
| 618 |
+
if 'Telefon' in df.columns:
|
| 619 |
+
df['Telefon'] = df['Telefon'].astype(str).apply(
|
| 620 |
+
lambda x: x.lstrip("'") if x and x.startswith("'") else x
|
| 621 |
+
)
|
| 622 |
+
# Konvertera "nan" och tomma strängar
|
| 623 |
+
df['Telefon'] = df['Telefon'].replace(['nan', 'None', ''], '')
|
| 624 |
+
|
| 625 |
+
# Rensa alla kolumner från eventuella apostrofer som inte behövs
|
| 626 |
+
for col in df.columns:
|
| 627 |
+
if df[col].dtype == 'object': # Text-kolumner
|
| 628 |
+
df[col] = df[col].astype(str).apply(
|
| 629 |
+
lambda x: x.lstrip("'") if isinstance(x, str) and x.startswith("'") else x
|
| 630 |
+
)
|
| 631 |
+
|
| 632 |
return df
|
| 633 |
except Exception as e:
|
| 634 |
st.error(f"❌ Fel vid hämtning av data: {e}")
|
| 635 |
+
print(f"[ERROR] get_sheet_data fel: {e}")
|
| 636 |
return None
|
| 637 |
|
| 638 |
def validate_password(df, password):
|
|
|
|
| 963 |
if col_name in headers:
|
| 964 |
col_idx = headers.index(col_name) + 1
|
| 965 |
|
| 966 |
+
# Speciell hantering för Telefon-kolumnen: bevara inledande nollor
|
| 967 |
+
value_to_write = new_value
|
| 968 |
+
if col_name == 'Telefon' and new_value and str(new_value).startswith('0'):
|
| 969 |
+
# Lägg till ' prefix för att tvinga Google Sheets att behandla som text
|
| 970 |
+
value_to_write = f"'{new_value}"
|
| 971 |
+
print(f"[DEBUG] Telefonnummer börjar med 0, lägger till text-prefix: '{new_value}'")
|
| 972 |
+
|
| 973 |
# Lägg till huvuduppdateringen
|
| 974 |
updates.append({
|
| 975 |
'range': f'{gspread.utils.rowcol_to_a1(sheet_row, col_idx)}',
|
| 976 |
+
'values': [[value_to_write]]
|
| 977 |
})
|
| 978 |
+
print(f"[DEBUG] Förbereder uppdatering: {col_name} rad {sheet_row} till '{value_to_write}'")
|
| 979 |
|
| 980 |
if not updates:
|
| 981 |
return False, "❌ Inga giltiga uppdateringar att utföra"
|