1 /* PSPP - a program for statistical analysis. 2 Copyright (C) 2007, 2010, 2016 Free Software Foundation, Inc. 3 4 This program is free software: you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation, either version 3 of the License, or 7 (at your option) any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 16 17 #ifndef SPREADSHEET_READ_H 18 #define SPREADSHEET_READ_H 1 19 20 #include <stdbool.h> 21 #include <libpspp/compiler.h> 22 23 struct casereeader; 24 25 /* Default width of string variables. */ 26 #define SPREADSHEET_DEFAULT_WIDTH 8 27 28 /* These elements are read/write. 29 They may be passed in NULL (for pointers) or negative for integers, in which 30 case they will be filled in be the function. 31 */ 32 struct spreadsheet_read_options 33 { 34 char *sheet_name ; /* The name of the sheet to open (in UTF-8) */ 35 int sheet_index ; /* The index of the sheet to open (only used if sheet_name is NULL). 36 The first index is 1 NOT 0 */ 37 char *cell_range ; /* The cell range (in UTF-8) */ 38 bool read_names ; /* True if the first row is to be used as the names of the variables */ 39 int asw ; /* The width of string variables in the created dictionary */ 40 }; 41 42 int ps26_to_int (const char *str); 43 char * int_to_ps26 (int); 44 45 bool convert_cell_ref (const char *ref, 46 int *col0, int *row0, 47 int *coli, int *rowi); 48 49 50 #define _xml(X) (CHAR_CAST (const xmlChar *, (X))) 51 52 #define _xmlchar_to_int(X) ((X) ? atoi (CHAR_CAST (const char *, (X))) : -1) 53 54 enum spreadsheet_type 55 { 56 SPREADSHEET_NONE, 57 SPREADSHEET_GNUMERIC, 58 SPREADSHEET_ODS 59 }; 60 61 62 struct spreadsheet 63 { 64 char *file_name; 65 66 enum spreadsheet_type type; 67 68 /* The total number of sheets in the "workbook" */ 69 int n_sheets; 70 71 /* The dictionary for client's reference. 72 Client must ref or clone it if it needs a permanent or modifiable copy. */ 73 struct dictionary *dict; 74 75 int ref_cnt; 76 }; 77 78 79 struct casereader * spreadsheet_make_reader (struct spreadsheet *, const struct spreadsheet_read_options *); 80 81 const char * spreadsheet_get_sheet_name (struct spreadsheet *s, int n) OPTIMIZE(2); 82 char * spreadsheet_get_sheet_range (struct spreadsheet *s, int n) OPTIMIZE(2); 83 84 85 char * create_cell_ref (int col0, int row0); 86 char *create_cell_range (int col0, int row0, int coli, int rowi); 87 88 void spreadsheet_unref (struct spreadsheet *); 89 void spreadsheet_ref (struct spreadsheet *); 90 91 92 93 94 95 #define SPREADSHEET_CAST(X) ((struct spreadsheet *)(X)) 96 97 #endif 98