Use convert cell range instead of doing it ourselves
authorJohn Darrington <john@darrington.wattle.id.au>
Sat, 12 Jan 2013 14:36:29 +0000 (15:36 +0100)
committerJohn Darrington <john@darrington.wattle.id.au>
Sat, 16 Feb 2013 14:03:00 +0000 (15:03 +0100)
src/data/gnumeric-reader.c
src/ui/gui/page-file.c
src/ui/gui/page-sheet-spec.c
src/ui/gui/text-data-import-dialog.c

index 9a059b85460d38301778ff017c5e29420a5b71f1..6cc7b3e1c254c0d920a93f2a1e1275b95a3b20d4 100644 (file)
@@ -169,7 +169,6 @@ process_node (struct gnumeric_reader *r)
        {
          if ( r->target_sheet != NULL)
            {
-             printf ("%s:%d\n", __FILE__, __LINE__);
              xmlChar *value = xmlTextReaderValue (r->xtr);
              if ( 0 == xmlStrcmp (value, r->target_sheet))
                r->state = STATE_SHEET_FOUND;
@@ -177,7 +176,6 @@ process_node (struct gnumeric_reader *r)
            }
          else if (r->target_sheet_index == r->sheet_index)
            {
-             printf ("%s:%d %d\n", __FILE__, __LINE__, r->sheet_index);
              r->state = STATE_SHEET_FOUND;
            }
        }
index 6422fa6ab463c49cda1a8f75b90089d067fecef9..a3aaf03749995da85ec84fd9f81d88cddaab57f5 100644 (file)
@@ -80,43 +80,46 @@ update_assistant (struct import_assistant *ia)
 
   struct file *file = &ia->file;
   struct separators_page *sepp = &ia->separators;
-  int col;
   int rows = 0;
-  struct ccase *c;
-  
-  sepp->column_cnt = dict_get_var_cnt (ssp->dict);
-  sepp->columns = xcalloc (sepp->column_cnt, sizeof (*sepp->columns));
-  for (col = 0; col < sepp->column_cnt ; ++col)
+  if (ssp->dict)
     {
-      const struct variable *var = dict_get_var (ssp->dict, col);
-      sepp->columns[col].name = xstrdup (var_get_name (var));
-      sepp->columns[col].contents = NULL;
-    }
+      struct ccase *c;
+      int col;
 
-  for (; (c = casereader_read (ssp->reader)) != NULL; case_unref (c))
-    {
-      rows++;
+      sepp->column_cnt = dict_get_var_cnt (ssp->dict);
+      sepp->columns = xcalloc (sepp->column_cnt, sizeof (*sepp->columns));
       for (col = 0; col < sepp->column_cnt ; ++col)
        {
-         char *ss;
          const struct variable *var = dict_get_var (ssp->dict, col);
+         sepp->columns[col].name = xstrdup (var_get_name (var));
+         sepp->columns[col].contents = NULL;
+       }
 
-         sepp->columns[col].contents = xrealloc (sepp->columns[col].contents,
-                                                 sizeof (struct substring) * rows);
+      for (; (c = casereader_read (ssp->reader)) != NULL; case_unref (c))
+       {
+         rows++;
+         for (col = 0; col < sepp->column_cnt ; ++col)
+           {
+             char *ss;
+             const struct variable *var = dict_get_var (ssp->dict, col);
 
-         ss = data_out (case_data (c, var), dict_get_encoding (ssp->dict), 
-                        var_get_print_format (var));
+             sepp->columns[col].contents = xrealloc (sepp->columns[col].contents,
+                                                     sizeof (struct substring) * rows);
 
-         sepp->columns[col].contents[rows - 1] = ss_cstr (ss);
-       }
+             ss = data_out (case_data (c, var), dict_get_encoding (ssp->dict), 
+                            var_get_print_format (var));
 
-      if (rows > MAX_PREVIEW_LINES)
-       {
-         case_unref (c);
-         break;
+             sepp->columns[col].contents[rows - 1] = ss_cstr (ss);
+           }
+
+         if (rows > MAX_PREVIEW_LINES)
+           {
+             case_unref (c);
+             break;
+           }
        }
     }
-
+  
   file->line_cnt = rows;
   casereader_destroy (ssp->reader);
   ssp->reader = NULL;
@@ -164,7 +167,7 @@ init_file (struct import_assistant *ia, GtkWindow *parent_window)
       ia->file.type = FTYPE_ODS;
     }
     
-  if (creader)
+  if (creader && dict)
     {
       struct sheet_spec_page *ssp = &ia->sheet_spec;
       ssp->dict = dict;
index dc31dec5ae57cc92bf17705ddaee9c67f6849171..1c72e830e0e1ab7c51cc8715ab7ba9ef5630d423 100644 (file)
@@ -93,17 +93,17 @@ reset_sheet_spec_page (struct import_assistant *ia)
 void
 post_sheet_spec_page (struct import_assistant *ia)
 {
-  char col_start[10];
-  char col_stop[10];
   int row_start = -1;
   int row_stop = -1;
+  int col_start = -1;
+  int col_stop = -1;
 
   GtkBuilder *builder = ia->asst.builder;
 
   struct file *file = &ia->file;
   struct sheet_spec_page *ssp = &ia->sheet_spec;
-  struct casereader *creader;
-  struct dictionary *dict;
+  struct casereader *creader = NULL;
+  struct dictionary *dict = NULL;
 
   GtkWidget *sheet_entry = get_widget_assert (builder, "sheet-entry");
   GtkWidget *range_entry = get_widget_assert (builder, "cell-range-entry");
@@ -112,15 +112,19 @@ post_sheet_spec_page (struct import_assistant *ia)
   gint num = atoi (gtk_entry_get_text (GTK_ENTRY (sheet_entry)));
 
   const gchar *range = gtk_entry_get_text (GTK_ENTRY (range_entry));
-  
-  sscanf (range, "%[a-zA-Z]%d:%[a-zA-Z]%d", col_start, &row_start, col_stop, &row_stop);
+
+
+  if ( num < 1 )
+    num = 1;
   
   ssp->opts.sheet_name = NULL;
-  ssp->opts.cell_range = NULL;
+  ssp->opts.cell_range = range;
   ssp->opts.sheet_index = num;
 
-  if ( row_start > 0 && row_stop > 0)
-    ssp->opts.cell_range = xasprintf ("%s%d:%s%d", col_start, row_start, col_stop, row_stop);
+  if ( convert_cell_ref (range, &col_start, &row_start, &col_stop, &row_stop))
+    {
+      ssp->opts.cell_range = range;
+    }
 
   ssp->sri.file_name = file->file_name;
   ssp->sri.read_names = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (readnames_checkbox));
@@ -142,6 +146,20 @@ post_sheet_spec_page (struct import_assistant *ia)
   ssp->dict = dict;
   ssp->reader = creader;
 
-  update_assistant (ia);
+  if (creader && dict)
+    {
+      update_assistant (ia);
+    }
+  else
+    {
+      GtkWidget * dialog = gtk_message_dialog_new (NULL,
+                             GTK_DIALOG_MODAL,
+                             GTK_MESSAGE_ERROR,
+                             GTK_BUTTONS_CLOSE,
+                             _("An error occurred reading the spreadsheet file."));
+
+      gtk_dialog_run (GTK_DIALOG (dialog));
+      gtk_widget_destroy (dialog);
+    }
 }
 
index ea7d6da219751c61f493530060481ed9e5803d73..df6e5ec995161be6708222bf31ad45b9383d8410 100644 (file)
@@ -80,8 +80,6 @@ text_data_import_assistant (PsppireDataWindow *dw)
       return;
     }
 
-  printf ("%s:%d %s\n", __FILE__, __LINE__, ia->file.file_name);
-
   init_assistant (ia, parent_window);
   if ( ia->file.type == FTYPE_TEXT)
     {