diff --git a/App.tsx b/App.tsx index 77f9531..2574efa 100644 --- a/App.tsx +++ b/App.tsx @@ -201,9 +201,9 @@ const App: React.FC = () => { await saveAdsData(data); console.log("Ads loaded:", data.length, "records from", file.name); setIsDataModalOpen(false); - } catch (error) { + } catch (error: any) { console.error("Failed to parse Ads file", error); - alert("Error parsing Ads file. Please check the format."); + alert(`Error parsing Ads file: ${error.message || 'Unknown error'}. Please check the format.`); } finally { setSyncing(false); } diff --git a/services/dataProcessor.ts b/services/dataProcessor.ts index 28c1f4c..b321fd9 100644 --- a/services/dataProcessor.ts +++ b/services/dataProcessor.ts @@ -357,7 +357,7 @@ export const processAdsExcel = async (fileOrBuffer: File | ArrayBuffer): Promise const arrayBuffer = fileOrBuffer instanceof File ? await fileOrBuffer.arrayBuffer() : fileOrBuffer; - const workbook = XLSX.read(arrayBuffer); + const workbook = XLSX.read(arrayBuffer, { type: 'array' }); const allData: AdsRecord[] = []; // Process ALL sheets (e.g., "2025", "2026") diff --git a/services/storage.ts b/services/storage.ts index 6ed6b9a..b45e5ee 100644 --- a/services/storage.ts +++ b/services/storage.ts @@ -4,7 +4,7 @@ import { SalesRecord } from '../types'; const DB_NAME = 'CrazeAnalytixDB'; const STORE_NAME = 'salesData'; const ADS_STORE_NAME = 'adsData'; -const DB_VERSION = 1; +const DB_VERSION = 2; // Increment this when data processing logic changes (e.g., field mapping changes) // This forces cache invalidation and re-processing of CSV data const DATA_SCHEMA_VERSION = 2; // Updated for LICENSE column mapping