From 0da19375f1f4a295dfd74ae06cdc1e0288179ae3 Mon Sep 17 00:00:00 2001 From: Shun Wang Date: Fri, 6 Sep 2024 09:30:08 +0000 Subject: [PATCH] address reviews suggestions --- Desktop/data/importers/excel/__freexl.h | 736 ------------------ Desktop/data/importers/excel/excel.cpp | 6 +- .../importers/excel/excelimportcolumn.cpp | 1 - Desktop/data/importers/excelimporter.cpp | 38 +- Docs/development/jasp-build-guide-linux.md | 2 +- Docs/development/jasp-build-guide-windows.md | 15 +- Tools/CMake/Libraries.cmake | 58 +- 7 files changed, 18 insertions(+), 838 deletions(-) delete mode 100644 Desktop/data/importers/excel/__freexl.h diff --git a/Desktop/data/importers/excel/__freexl.h b/Desktop/data/importers/excel/__freexl.h deleted file mode 100644 index 690ba9632d..0000000000 --- a/Desktop/data/importers/excel/__freexl.h +++ /dev/null @@ -1,736 +0,0 @@ -// fetch from: https://www.gaia-gis.it/fossil/freexl/dir?ci=tip -// at UTC+8 2024-8-19 10:00 - -/* -/ freexl.h -/ -/ public declarations -/ -/ version 2.1, 2023 August 14 -/ -/ Author: Sandro Furieri a.furieri@lqt.it -/ -/ ------------------------------------------------------------------------------ -/ -/ Version: MPL 1.1/GPL 2.0/LGPL 2.1 -/ -/ The contents of this file are subject to the Mozilla Public License Version -/ 1.1 (the "License"); you may not use this file except in compliance with -/ the License. You may obtain a copy of the License at -/ http://www.mozilla.org/MPL/ -/ -/ Software distributed under the License is distributed on an "AS IS" basis, -/ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License -/ for the specific language governing rights and limitations under the -/ License. -/ -/ The Original Code is the FreeXL library -/ -/ The Initial Developer of the Original Code is Alessandro Furieri -/ -/ Portions created by the Initial Developer are Copyright (C) 2011-2023 -/ the Initial Developer. All Rights Reserved. -/ -/ Contributor(s): -/ Brad Hards -/ Mark Finnis -/ -/ Alternatively, the contents of this file may be used under the terms of -/ either the GNU General Public License Version 2 or later (the "GPL"), or -/ the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), -/ in which case the provisions of the GPL or the LGPL are applicable instead -/ of those above. If you wish to allow use of your version of this file only -/ under the terms of either the GPL or the LGPL, and not to allow others to -/ use your version of this file under the terms of the MPL, indicate your -/ decision by deleting the provisions above and replace them with the notice -/ and other provisions required by the GPL or the LGPL. If you do not delete -/ the provisions above, a recipient may use your version of this file under -/ the terms of any one of the MPL, the GPL or the LGPL. -/ -*/ - -/** - \file freexl.h - - Function declarations and constants for FreeXL library - */ -#ifndef DOXYGEN_SHOULD_SKIP_THIS -#ifdef DLL_EXPORT -#define FREEXL_DECLARE __declspec(dllexport) -#else -#define FREEXL_DECLARE extern -#endif -#endif - -#ifndef _FREEXL_H -#ifndef DOXYGEN_SHOULD_SKIP_THIS -#define _FREEXL_H -#endif - -#ifdef __cplusplus -extern "C" -{ -#endif - -/* constants */ -/** query is not applicable, or information is not available */ -#define FREEXL_UNKNOWN 0 - -/* CFBF constants */ -/** CFBF file is version 3 */ -#define FREEXL_CFBF_VER_3 3 -/** CFBF file is version 4 */ -#define FREEXL_CFBF_VER_4 4 - -/** CFBF file uses 512 byte sectors */ -#define FREEXL_CFBF_SECTOR_512 512 -/** CFBF file uses 4096 (4K) sectors */ -#define FREEXL_CFBF_SECTOR_4096 4096 - -/* BIFF versions */ -/** BIFF file is version 2 */ -#define FREEXL_BIFF_VER_2 2 -/** BIFF file is version 3 */ -#define FREEXL_BIFF_VER_3 3 -/** BIFF file is version 4 */ -#define FREEXL_BIFF_VER_4 4 -/** BIFF file is version 5 */ -#define FREEXL_BIFF_VER_5 5 -/** BIFF file is version 9 */ -#define FREEXL_BIFF_VER_8 8 - -/* BIFF MaxRecordSize */ -/** Maximum BIFF record size is 2080 bytes */ -#define FREEXL_BIFF_MAX_RECSZ_2080 2080 -/** Maximum BIFF record size is 8224 bytes */ -#define FREEXL_BIFF_MAX_RECSZ_8224 8224 - -/* BIFF DateMode */ -/** BIFF date mode starts at 1 Jan 1900 */ -#define FREEXL_BIFF_DATEMODE_1900 1900 -/** BIFF date mode starts at 2 Jan 1904 */ -#define FREEXL_BIFF_DATEMODE_1904 1904 - -/* BIFF Obsfuscated */ -/** BIFF file is password protected */ -#define FREEXL_BIFF_OBFUSCATED 3003 -/** BIFF file is not password protected */ -#define FREEXL_BIFF_PLAIN 3004 - -/* BIFF CodePage */ -/** BIFF file uses plain ASCII encoding */ -#define FREEXL_BIFF_ASCII 0x016F -/** BIFF file uses CP437 (OEM US format) encoding */ -#define FREEXL_BIFF_CP437 0x01B5 -/** BIFF file uses CP720 (Arabic DOS format) encoding */ -#define FREEXL_BIFF_CP720 0x02D0 -/** BIFF file uses CP737 (Greek DOS format) encoding */ -#define FREEXL_BIFF_CP737 0x02E1 -/** BIFF file uses CP775 (Baltic DOS format) encoding */ -#define FREEXL_BIFF_CP775 0x0307 -/** BIFF file uses CP850 (Western Europe DOS format) encoding */ -#define FREEXL_BIFF_CP850 0x0352 -/** BIFF file uses CP852 (Central Europe DOS format) encoding */ -#define FREEXL_BIFF_CP852 0x0354 -/** BIFF file uses CP855 (OEM Cyrillic format) encoding */ -#define FREEXL_BIFF_CP855 0x0357 -/** BIFF file uses CP857 (Turkish DOS format) encoding */ -#define FREEXL_BIFF_CP857 0x0359 -/** BIFF file uses CP858 (OEM Multiligual Latin 1 format) encoding */ -#define FREEXL_BIFF_CP858 0x035A -/** BIFF file uses CP860 (Portuguese DOS format) encoding */ -#define FREEXL_BIFF_CP860 0x035C -/** BIFF file uses CP861 (Icelandic DOS format) encoding */ -#define FREEXL_BIFF_CP861 0x035D -/** BIFF file uses CP862 (Hebrew DOS format) encoding */ -#define FREEXL_BIFF_CP862 0x035E -/** BIFF file uses CP863 (French Canadian DOS format) encoding */ -#define FREEXL_BIFF_CP863 0x035F -/** BIFF file uses CP864 (Arabic DOS format) encoding */ -#define FREEXL_BIFF_CP864 0x0360 -/** BIFF file uses CP865 (Nordic DOS format) encoding */ -#define FREEXL_BIFF_CP865 0x0361 -/** BIFF file uses CP866 (Cyrillic DOS format) encoding */ -#define FREEXL_BIFF_CP866 0x0362 -/** BIFF file uses CP869 (Modern Greek DOS format) encoding */ -#define FREEXL_BIFF_CP869 0x0365 -/** BIFF file uses CP874 (Thai Windows format) encoding */ -#define FREEXL_BIFF_CP874 0x036A -/** BIFF file uses CP932 (Shift JIS format) encoding */ -#define FREEXL_BIFF_CP932 0x03A4 -/** BIFF file uses CP936 (Simplified Chinese GB2312 format) encoding */ -#define FREEXL_BIFF_CP936 0x03A8 -/** BIFF file uses CP949 (Korean) encoding */ -#define FREEXL_BIFF_CP949 0x03B5 -/** BIFF file uses CP950 (Traditional Chinese Big5 format) encoding */ -#define FREEXL_BIFF_CP950 0x03B6 -/** BIFF file uses Unicode (UTF-16LE format) encoding */ -#define FREEXL_BIFF_UTF16LE 0x04B0 -/** BIFF file uses CP1250 (Central Europe Windows) encoding */ -#define FREEXL_BIFF_CP1250 0x04E2 -/** BIFF file uses CP1251 (Cyrillic Windows) encoding */ -#define FREEXL_BIFF_CP1251 0x04E3 -/** BIFF file uses CP1252 (Windows Latin 1) encoding */ -#define FREEXL_BIFF_CP1252 0x04E4 -/** BIFF file uses CP1252 (Windows Greek) encoding */ -#define FREEXL_BIFF_CP1253 0x04E5 -/** BIFF file uses CP1254 (Windows Turkish) encoding */ -#define FREEXL_BIFF_CP1254 0x04E6 -/** BIFF file uses CP1255 (Windows Hebrew) encoding */ -#define FREEXL_BIFF_CP1255 0x04E7 -/** BIFF file uses CP1256 (Windows Arabic) encoding */ -#define FREEXL_BIFF_CP1256 0x04E8 -/** BIFF file uses CP1257 (Windows Baltic) encoding */ -#define FREEXL_BIFF_CP1257 0x04E9 -/** BIFF file uses CP1258 (Windows Vietnamese) encoding */ -#define FREEXL_BIFF_CP1258 0x04EA -/** BIFF file uses CP1361 (Korean Johab) encoding */ -#define FREEXL_BIFF_CP1361 0x0551 -/** BIFF file uses Mac Roman encoding */ -#define FREEXL_BIFF_MACROMAN 0x2710 - -/* CELL VALUE Types */ -/** Cell has no value (empty cell) */ -#define FREEXL_CELL_NULL 101 -/** Cell contains an integer value */ -#define FREEXL_CELL_INT 102 -/** Cell contains a floating point number */ -#define FREEXL_CELL_DOUBLE 103 -/** Cell contains a text value */ -#define FREEXL_CELL_TEXT 104 -/** Cell contains a reference to a String */ -#define FREEXL_CELL_SST_TEXT 105 -/** Cell contains a number intended to represent a date */ -#define FREEXL_CELL_DATE 106 -/** Cell contains a number intended to represent a date and time */ -#define FREEXL_CELL_DATETIME 107 -/** Cell contains a number intended to represent a time */ -#define FREEXL_CELL_TIME 108 - -/* INFO params */ -/** Information query for CFBF version */ -#define FREEXL_CFBF_VERSION 32001 -/** Information query for CFBF sector size */ -#define FREEXL_CFBF_SECTOR_SIZE 32002 -/** Information query for CFBF FAT entry count */ -#define FREEXL_CFBF_FAT_COUNT 32003 -/** Information query for BIFF version */ -#define FREEXL_BIFF_VERSION 32005 -/** Information query for BIFF maximum record size */ -#define FREEXL_BIFF_MAX_RECSIZE 32006 -/** Information query for BIFF date mode */ -#define FREEXL_BIFF_DATEMODE 32007 -/** Information query for BIFF password protection state */ -#define FREEXL_BIFF_PASSWORD 32008 -/** Information query for BIFF character encoding */ -#define FREEXL_BIFF_CODEPAGE 32009 -/** Information query for BIFF sheet count */ -#define FREEXL_BIFF_SHEET_COUNT 32010 -/** Information query for BIFF Single String Table entry count (BIFF8) */ -#define FREEXL_BIFF_STRING_COUNT 32011 -/** Information query for BIFF format count */ -#define FREEXL_BIFF_FORMAT_COUNT 32012 -/** Information query for BIFF extended format count */ -#define FREEXL_BIFF_XF_COUNT 32013 - -/* Error codes */ -#define FREEXL_OK 0 /**< No error, success */ -#define FREEXL_FILE_NOT_FOUND -1 /**< .xls or .xlsx file does not exist or is - not accessible for reading */ -#define FREEXL_NULL_HANDLE -2 /**< Null freexl_handle argument */ -#define FREEXL_INVALID_HANDLE -3 /**< Invalid freexl_handle argument */ -#define FREEXL_INSUFFICIENT_MEMORY -4 /**< some kind of memory allocation - failure */ -#define FREEXL_NULL_ARGUMENT -5 /**< an unexpected null argument */ -#define FREEXL_INVALID_INFO_ARG -6 /**< invalid "what" parameter */ -#define FREEXL_INVALID_CFBF_HEADER -7 /**< the .xls file does not contain a - valid CFBF header */ -#define FREEXL_CFBF_READ_ERROR -8 /**< Read error. Usually indicates a - corrupt or invalid .xls file */ -#define FREEXL_CFBF_SEEK_ERROR -9 /**< Seek error. Usually indicates a - corrupt or invalid .xls file */ -#define FREEXL_CFBF_INVALID_SIGNATURE -10 /**< The .xls file does contain a - CFBF header, but the header is - broken or corrupted in some way - */ -#define FREEXL_CFBF_INVALID_SECTOR_SIZE -11 /**< The .xls file does contain a - CFBF header, but the header is - broken or corrupted in some way - */ -#define FREEXL_CFBF_EMPTY_FAT_CHAIN -12 /**< The .xls file does contain a - CFBF header, but the header is - broken or corrupted in some way - */ -#define FREEXL_CFBF_ILLEGAL_FAT_ENTRY -13 /**< The file contains an invalid - File Allocation Table record */ -#define FREEXL_BIFF_INVALID_BOF -14 /**< The file contains an invalid - BIFF format entry */ -#define FREEXL_BIFF_INVALID_SST -15 /**< The file contains an invalid - Single String Table */ -#define FREEXL_BIFF_ILLEGAL_SST_INDEX -16 /**< The requested Single String - Table entry is not available */ -#define FREEXL_BIFF_WORKBOOK_NOT_FOUND -17 /**< BIFF does not contain a valid - workbook */ -#define FREEXL_BIFF_ILLEGAL_SHEET_INDEX -18 /**< The requested worksheet is not - available in the workbook */ -#define FREEXL_BIFF_UNSELECTED_SHEET -19 /**< There is no currently active - worksheet. Possibly a forgotten - call to - freexl_select_active_worksheet() - */ -#define FREEXL_INVALID_CHARACTER -20 /**< Charset conversion detected an - illegal character (not within - the declared charset) */ -#define FREEXL_UNSUPPORTED_CHARSET -21 /**< The requested charset - conversion is not available. */ -#define FREEXL_ILLEGAL_CELL_ROW_COL -22 /**< The requested cell is outside - the valid range for the sheet*/ -#define FREEXL_ILLEGAL_RK_VALUE -23 /**< Conversion of the RK value - failed. Possibly a corrupt file - or a bug in FreeXL. */ -#define FREEXL_ILLEGAL_MULRK_VALUE -23 /**< Conversion of the MULRK value - failed. Possibly a corrupt file - or a bug in FreeXL. */ -#define FREEXL_INVALID_MINI_STREAM -24 /**< The MiniFAT stream is invalid. - Possibly a corrupt file. */ -#define FREEXL_CFBF_ILLEGAL_MINI_FAT_ENTRY -25 /**< The MiniFAT stream - contains an invalid entry. - Possibly a corrupt file. */ -#define FREEXL_CRAFTED_FILE -26 /**< A severely corrupted file - (may be purposely crafted for - malicious purposes) has been - detected. */ -#define FREEXL_INVALID_XLSX -27 /**< The file doesn't seems to be a - valid XLSX document */ -#define FREEXL_XLSX_ILLEGAL_SHEET_INDEX -28 /**< The requested worksheet is not - available in the workbook */ -#define FREEXL_XSLX_UNSELECTED_SHEET -29 /**< There is no currently active - worksheet. Possibly a forgotten - call to - freexl_select_active_worksheet() */ -#define FREEXL_XLSX_INVALID_SST -30 /**< The file contains an invalid - Single String Table */ -#define FREEXL_XLSX_ILLEGAL_SST_INDEX -31 /**< The requested Single String - Table entry is not available */ -#define FREEXL_ODS_ILLEGAL_SHEET_INDEX -32 /**< The requested worksheet is not - available in the workbook */ -#define FREEXL_ODS_UNSELECTED_SHEET -33 /**< There is no currently active - worksheet. Possibly a forgotten - call to - freexl_select_active_worksheet() */ - - /** - Container for a cell value - - freexl_get_cell_value() takes a pointer to this structure, and fills - in the appropriate values. - - \code - FreeXL_CellValue val; - freexl_get_cell_value(..., &val); - switch (val.type) - { - case FREEXL_CELL_INT: - printf("Int=%d\n", val.value.int_value; - break; - case FREEXL_CELL_DOUBLE: - printf("Double=%1.2f\n", val.value.double_value; - break; - case FREEXL_CELL_TEXT: - case FREEXL_CELL_SST_TEXT: - printf("Text='%s'\n", val.value.text_value; - break; - case FREEXL_CELL_DATE: - case FREEXL_CELL_DATETIME: - case FREEXL_CELL_TIME: - printf("DateOrTime='%s'\n", val.value.text_value; - break; - case FREEXL_CELL_NULL: - printf("NULL\n"); - break; - default: - printf("Invalid data-type\n"); - break; - } - \endcode - */ - struct FreeXL_CellValue_str - { - /** - The type of data stored in this cell. Can be one of the following: - - FREEXL_CELL_NULL the cell contains a NULL value. - - FREEXL_CELL_INT the cell contains an INTEGER value. - - FREEXL_CELL_DOUBLE the cell contains a DOUBLE value. - - FREEXL_CELL_TEXT or FREEXL_CELL_SST_TEXT the cell contains a text - string (always UTF-8 encoded) - - FREEXL_CELL_DATE the cell contains a date, encoded as a 'YYYY-MM-DD' - string value - - FREEXL_CELL_DATETIME the cell contains a date and time, encoded as a - 'YYYY-MM-DD HH:MM:SS' string value - - FREEXL_CELL_TIME the cell contains a time, encoded as a 'HH:MM:SS' - string value - */ - unsigned char type; - union - { - int int_value; /**< if type is FREEXL_CELL_INT, then the - corresponding value will be returned as int_value */ - double double_value; /**< if type is FREEXL_CELL_DOUBLE, then the - corresponding value will be returned as double_value */ - const char *text_value; /**< if type is FREEXL_CELL_TEXT, - FREEXL_CELL_SST_TEXT, FREEXL_CELL_DATE, FREEXL_CELL_DATETIME or - FREEXL_CELL_TIME the corresponding value will be returned as - text_value */ - } value; /**< The value of the data stored in the cell. Which part of - the union is valid is determined by the type value. */ - }; - - /** - Typedef for cell value structure. - - \sa FreeXL_CellValue_str - */ - typedef struct FreeXL_CellValue_str FreeXL_CellValue; - - - /** - Return the current library version. - - \return the version string. - */ - FREEXL_DECLARE const char *freexl_version (void); - - /** - Open the .xls file, preparing for future functions - - \param path full or relative pathname of the input .xls file. - \param freexl_handle an opaque reference (handle) to be used in each - subsequent function (return value). - - \return FREEXL_OK will be returned on success, otherwise any appropriate - error code on failure. - - \note You are expected to freexl_close() even on failure, so as to - correctly release any dynamic memory allocation. - - \sa freexl_open_xlsx, freexl_open_ods, freexl_open_info, freexl_close. - */ - FREEXL_DECLARE int freexl_open (const char *path, - const void **freexl_handle); - - /** - Open the .xlsx file, preparing for future functions - - \param path full or relative pathname of the input .xlsx file. - \param freexl_handle an opaque reference (handle) to be used in each - subsequent function (return value). - - \return FREEXL_OK will be returned on success, otherwise any appropriate - error code on failure. - - \note You are expected to freexl_close() even on failure, so as to - correctly release any dynamic memory allocation. - - \sa freexl_open, freexl_open_ods, freexl_close. - */ - FREEXL_DECLARE int freexl_open_xlsx (const char *path, - const void **freexl_handle); - - /** - Open the .ods file, preparing for future functions - - \param path full or relative pathname of the input .ods file. - \param freexl_handle an opaque reference (handle) to be used in each - subsequent function (return value). - - \return FREEXL_OK will be returned on success, otherwise any appropriate - error code on failure. - - \note You are expected to freexl_close() even on failure, so as to - correctly release any dynamic memory allocation. - - \sa freexl_open, freexl_open_xlsx, freexl_close. - */ - FREEXL_DECLARE int freexl_open_ods (const char *path, - const void **freexl_handle); - - /** - Open the .xls file for metadata query only - - This is similar to freexl_open(), except that an abbreviated parsing - step is performed. This makes it faster, but does not support queries - for cell values. - - \param path full or relative pathname of the input .xls file. - \param freexl_handle an opaque reference (handle) to be used in each - subsequent function (return value). - - \return FREEXL_OK will be returned on success, otherwise any appropriate - error code on failure. - - \note You are expected to freexl_close() even on failure, so as to - correctly release any dynamic memory allocation. - - \sa freexl_open, freexl_close, freexl_close_xls - */ - FREEXL_DECLARE int freexl_open_info (const char *path, - const void **freexl_handle); - - /** - Closing the FREEXL file and releasing any allocated resource - - \param freexl_handle the handle previously returned by freexl_open(), - freexl_open_xlsx() or freexl_open_ods() - - \return FREEXL_OK will be returned on success - - \note this function is just a convenience method that will automatically - dispatch freexl_close_xls() or freexl_close_xlsx() or even freexl_close_ods() - accordingly to the actual type of the passed handle. - - \sa freexl_close_xls, freexl_close_xlsx, freexl_close_ods - */ - FREEXL_DECLARE int freexl_close (const void *freexl_handle); - - /** - Closing the XLS file and releasing any allocated resource - - \param freexl_handle the handle previously returned by freexl_open() - - \return FREEXL_OK will be returned on success - - \note After calling freexl_close_xls() any related resource will be released, - and the handle will no longer be valid. - * - \sa freexl_close, freexl_close_xlsx, freexl_close_ods - */ - FREEXL_DECLARE int freexl_close_xls (const void *freexl_handle); - - /** - Closing the XLSX file and releasing any allocated resource - - \param freexl_handle the handle previously returned by freexl_open_xlsx() - - \return FREEXL_OK will be returned on success - - \note After calling freexl_close_xlsx() any related resource will be released, - and the handle will no longer be valid. - * - \sa freexl_close, freexl_close_xls, freexl_close_ods - */ - FREEXL_DECLARE int freexl_close_xlsx (const void *freexl_handle); - - /** - Closing the ODS file and releasing any allocated resource - - \param freexl_handle the handle previously returned by freexl_open_ods() - - \return FREEXL_OK will be returned on success - - \note After calling freexl_close_ods() any related resource will be released, - and the handle will no longer be valid. - * - \sa freexl_close, freexl_close_xls, freexl_close_xlsx - */ - FREEXL_DECLARE int freexl_close_ods (const void *freexl_handle); - - /** - Query general information about the Workbook and Worksheets - XLS - - \param freexl_handle the handle previously returned by freexl_open() - or freexl_open_info() - \param what the info to be queried. - \param info the corresponding information value (return value) - - \note FREEXL_UNKNOWN will be returned in \p info if the information is - not available, not appropriate or not supported for the file type. - - \return FREEXL_OK will be returned on success - - Valid values for \p what are: - - FREEXL_CFBF_VERSION (returning FREEXL_CFBF_VER_3 or FREEXL_CFBF_VER_4) - - FREEXL_CFBF_SECTOR_SIZE (returning FREEXL_CFBF_SECTOR_512 or - FREEXL_CFBF_SECTOR_4096) - - FREEXL_CFBF_FAT_COUNT (returning the total count of FAT entries in the - file) - - FREEXL_BIFF_VERSION (return one of FREEXL_BIFF_VER_2, FREEXL_BIFF_VER_3, - FREEXL_BIFF_VER_4, FREEXL_BIFF_VER_5, FREEXL_BIFF_VER_8) - - FREEXL_BIFF_MAX_RECSIZE (returning FREEXL_BIFF_MAX_RECSZ_2080 or - FREEXL_BIFF_MAX_RECSZ_8224) - - FREEXL_BIFF_DATEMODE (returning FREEXL_BIFF_DATEMODE_1900 or - FREEXL_BIFF_DATEMODE_1904) - - FREEXL_BIFF_PASSWORD (returning FREEXL_BIFF_OBFUSCATED or - FREEXL_BIFF_PLAIN) - - FREEXL_BIFF_CODEPAGE (returning FREEXL_BIFF_ASCII, one of - FREEXL_BIFF_CP*,FREEXL_BIFF_UTF16LE - or FREEXL_BIFF_MACROMAN) - - FREEXL_BIFF_SHEET_COUNT (returning the total number of worksheets) - - FREEXL_BIFF_STRING_COUNT (returning the total number of Single String - Table entries) - - FREEXL_BIFF_FORMAT_COUNT (returning the total number of format entries) - - FREEXL_BIFF_XF_COUNT (returning the number of extended format entries) - - \note will only work when the handle if of the XLS type. - */ - FREEXL_DECLARE int freexl_get_info (const void *freexl_handle, - unsigned short what, - unsigned int *info); - - /** - Querying how many Single Strings are in the Workbook - - \param freexl_handle the handle previously returned by freexl_open() - or freexl_open_xlsx but not by freexl_open_ods() - \param info the corresponding information value (return value) - - \note FREEXL_UNKNOWN will be returned in \p info if the information is - not available, not appropriate or not supported for the file type. - - \return FREEXL_OK will be returned on success - */ - FREEXL_DECLARE int freexl_get_strings_count (const void *freexl_handle, - unsigned int *info); - - /** - Querying how many Worksheets are in the Workbook - - \param freexl_handle the handle previously returned by freexl_open() - or freexl_open_xlsx or either freexl_open_ods() - \param info the corresponding information value (return value) - - \note FREEXL_UNKNOWN will be returned in \p info if the information is - not available, not appropriate or not supported for the file type. - - \return FREEXL_OK will be returned on success - */ - FREEXL_DECLARE int freexl_get_worksheets_count (const void *freexl_handle, - unsigned int *info); - - /** - Query worksheet name - - \param freexl_handle the handle previously returned by freexl_open() - \param sheet_index the index identifying the worksheet (base 0) - \param string the name of the worksheet (return value) - - \return FREEXL_OK will be returned on success - */ - FREEXL_DECLARE int freexl_get_worksheet_name (const void *freexl_handle, - unsigned short sheet_index, - const char **string); - - /** - Set the currently active worksheets - - Within a FreeXL handle, only one worksheet can be active at a time. - Functions that fetch data are implictly working on the selected worksheet. - - \param freexl_handle the handle previously returned by freexl_open() - \param sheet_index the index identifying the worksheet (base 0) - - \return FREEXL_OK will be returned on success - */ - FREEXL_DECLARE int freexl_select_active_worksheet (const void - *freexl_handle, - unsigned short - sheet_index); - - /** - Query the currently active worksheet index - - \param freexl_handle the handle previously returned by freexl_open() - \param sheet_index the index corresponding to the currently active - Worksheet (return value) - - \return FREEXL_OK will be returned on success - - \sa freexl_select_active_worksheet for how to select the worksheet - */ - FREEXL_DECLARE int freexl_get_active_worksheet (const void *freexl_handle, - unsigned short - *sheet_index); - - /** - Query worksheet dimensions - - This function returns the number of rows and columns for the currently - selected worksheet. - - \param freexl_handle the handle previously returned by freexl_open() - \param rows the total row count (return value) - \param columns the total column count (return value) - - \return FREEXL_OK will be returned on success - - \note Worksheet dimensions are zero based, so if you - have a worksheet that is four columns and two rows (i.e. from A1 in the - top left corner to B4 in the bottom right corner), this will return rows - equal to 1 and columns equal to 3). This is to support C style looping. - */ - FREEXL_DECLARE int freexl_worksheet_dimensions (const void *freexl_handle, - unsigned int *rows, - unsigned short *columns); - - /** - Retrieve string entries from SST - - \param freexl_handle the handle previously returned by freexl_open() - \param string_index the index identifying the String entry (base 0). - \param string the corresponding String value (return value) - - \return FREEXL_OK will be returned on success - - \note This function is not normally required, since freexl_get_cell_value - will return the string where appropriate. It is mainly intended for - debugging purposes. - - */ - FREEXL_DECLARE int freexl_get_SST_string (const void *freexl_handle, - unsigned short string_index, - const char **string); - - /** - Retrieve FAT entries from FAT chain - - \param freexl_handle the handle previously returned by freexl_open() - \param sector_index the index identifying the Sector entry (base 0). - \param next_sector_index the index identifying the next Sector to be - accessed in logical order (return value). - - \note The following values imply special meaning: - - 0xffffffff free / unused sector - - 0xfffffffe end of chain - - 0xfffffffd sector used by FAT (map of sectors) - - 0xfffffffc double-indirect FAT sector (map of FAT sectors) - - \return FREEXL_OK will be returned on success - - \note This function is not normally required, since FreeXL will handle - FAT table entries transparent to the user. It is mainly intended for - debugging purposes. - - */ - FREEXL_DECLARE int freexl_get_FAT_entry (const void *freexl_handle, - unsigned int sector_index, - unsigned int *next_sector_index); - - /** - Retrieve individual cell values from the currently active worksheet - - \param freexl_handle the handle previously returned by freexl_open() - \param row row number of the cell to query (zero base) - \param column column number of the cell to query (zero base) - \param value the cell type and value (return value) - - \return FREEXL_OK will be returned on success - */ - FREEXL_DECLARE int freexl_get_cell_value (const void *freexl_handle, - unsigned int row, - unsigned short column, - FreeXL_CellValue * value); - -#ifdef __cplusplus -} -#endif - -#endif /* _FREEXL_H */ \ No newline at end of file diff --git a/Desktop/data/importers/excel/excel.cpp b/Desktop/data/importers/excel/excel.cpp index 62ac99a317..c8e82c5b24 100644 --- a/Desktop/data/importers/excel/excel.cpp +++ b/Desktop/data/importers/excel/excel.cpp @@ -31,7 +31,7 @@ Excel::Excel(const string &locator) void Excel::open() { - _fileSize = Utils::getFileSize(_path); + _fileSize = QFileInfo::size(_path); if (_fileSize < 0) throw runtime_error("Could not access file"); @@ -41,8 +41,8 @@ void Excel::open() } void Excel::openWorkbook() { - QString xlsFilePath = QString::fromStdString(_path); - const char* utf8Path = xlsFilePath.toUtf8(); + QString xlsFilePath = tq(_path); + const char* utf8Path = _path.c_str(); //But it would be better to just use _path.c_str() directly if you need it. It is in utf8 in any case. QString extension = QFileInfo(xlsFilePath).suffix().toLower(); int ret = 0; diff --git a/Desktop/data/importers/excel/excelimportcolumn.cpp b/Desktop/data/importers/excel/excelimportcolumn.cpp index dc4ccab420..a9cf48a2f8 100644 --- a/Desktop/data/importers/excel/excelimportcolumn.cpp +++ b/Desktop/data/importers/excel/excelimportcolumn.cpp @@ -13,7 +13,6 @@ ExcelImportColumn::ExcelImportColumn(ImportDataSet *importDataSet, std::string n ExcelImportColumn::~ExcelImportColumn() { JASPTIMER_SCOPE(ExcelImportColumn::~ExcelImportColumn()); - _data.clear(); } size_t ExcelImportColumn::size() const diff --git a/Desktop/data/importers/excelimporter.cpp b/Desktop/data/importers/excelimporter.cpp index 1bf55af562..1741556164 100644 --- a/Desktop/data/importers/excelimporter.cpp +++ b/Desktop/data/importers/excelimporter.cpp @@ -18,11 +18,10 @@ #include "excelimporter.h" #include "data/importers/excel/excel.h" #include "data/importers/excel/excelimportcolumn.h" -#include + #include #include - -using namespace std; +#include "columnutils.h" ExcelImporter::ExcelImporter() : Importer() {} @@ -74,26 +73,16 @@ ImportDataSet* ExcelImporter::loadFile(const std::string &locator, std::function for (int i = 0; i < colNames.size(); ++i) { + string colName = colNames[i]; string colName = colNames[i]; if (colName.empty()) - { colName = "V" + std::to_string(i + 1); - } else - { - try - { - if (std::to_string(std::stoi(colName)) == colName) - colName = "V" + colName; - } catch (...) {} - } + else if(ColumnUtils::isIntValue(colName)) + colName = "V" + colName; + + //What is the purpose of the `find` here? Maybe explain in a comment here if (std::find(colNames.begin(), colNames.begin() + i, colName) != colNames.begin() + i) colName += "_" + std::to_string(i + 1); - - colNames[i] = colName; - importColumns.push_back(new ExcelImportColumn(data, colName, rows - 1)); - } - } - else { for (int i = 0; i < importColumns.size(); ++i) { @@ -104,13 +93,6 @@ ImportDataSet* ExcelImporter::loadFile(const std::string &locator, std::function for (ExcelImportColumn* col : importColumns) { - data->addColumn(col); - } - - data->buildDictionary(); - excel.close(); - - JASPTIMER_STOP(ExcelImporter::loadFile); - - return data; -} + else + for (int i = 0; i < importColumns.size(); ++i) + importColumns[i]->addValue(i < lineValues.size() ? lineValues[i] : ""); \ No newline at end of file diff --git a/Docs/development/jasp-build-guide-linux.md b/Docs/development/jasp-build-guide-linux.md index 04c8f5eceb..b4bbbc1a6a 100644 --- a/Docs/development/jasp-build-guide-linux.md +++ b/Docs/development/jasp-build-guide-linux.md @@ -40,7 +40,7 @@ Based on your system, you can install the mentioned libraries using your package On Ubuntu, you can use `apt`. ``` -sudo apt install libboost-dev libjsoncpp25 libjsoncpp-dev libarchive13 libarchive-dev libxcb-xkb-dev libxcb-xkb1 libxcb-xinerama0 libxcb-cursor0 libxkbcommon-dev libxkbcommon-x11-dev autoconf zlib1g zlib1g-dev cmake gfortran build-essential flex libssl-dev libgl1-mesa-dev libsqlite3-dev r-base libglpk-dev libminizip-dev +sudo apt install libboost-dev libjsoncpp25 libjsoncpp-dev libarchive13 libarchive-dev libxcb-xkb-dev libxcb-xkb1 libxcb-xinerama0 libxcb-cursor0 libxkbcommon-dev libxkbcommon-x11-dev autoconf zlib1g zlib1g-dev cmake gfortran build-essential flex libssl-dev libgl1-mesa-dev libsqlite3-dev r-base libglpk-dev libminizip-dev libfreexl-dev ``` > ⚠️ Some of these libraries might not be up-to-date and as a result JASP will complain. If this happens, you need to download, make and install those libraries individually. Alternatively, you can use the [Linux version of Homebrew](https://docs.brew.sh/Homebrew-on-Linux) and install the up-to-dated libraries locally. diff --git a/Docs/development/jasp-build-guide-windows.md b/Docs/development/jasp-build-guide-windows.md index ce70a29e0e..974f24a573 100644 --- a/Docs/development/jasp-build-guide-windows.md +++ b/Docs/development/jasp-build-guide-windows.md @@ -67,12 +67,12 @@ After installing Rtools44, you will find a new program in your Start Menu. Searc Copy and paste the following line into the `ucrt64` command line and press Enter. With this command, we are installing some of required packages and libraries necessary for building JASP. Run this command at least twice to make sure all required packages are installed. ```bash -pacman -Syu mingw-w64-ucrt-x86_64-toolchain mingw-w64-ucrt-x86_64-boost jsoncpp bison flex make autoconf automake git wget cmake mingw-w64-ucrt-x86_64-libiconv libiconv-devel libtool zlib-devel zlib mingw-w64-ucrt-x86_64-zlib mingw-w64-ucrt-x86_64-jsoncpp mingw-w64-ucrt-x86_64-minizip +pacman -Syu mingw-w64-ucrt-x86_64-toolchain mingw-w64-ucrt-x86_64-boost jsoncpp bison flex make autoconf automake git wget cmake mingw-w64-ucrt-x86_64-libiconv libiconv-devel libtool zlib-devel zlib mingw-w64-ucrt-x86_64-zlib mingw-w64-ucrt-x86_64-jsoncpp ``` -#### Downloading and Building libraries (on Rtools44) +#### Downloading and Building ReadStat (on Rtools44) -In addition to these libraries, you need to manually download and install the ReadStat and FreeXL libraries. You can do that by typing the following commands into the `ucrt64` command line. +In addition to these libraries, you need to manually download and install the ReadStat library. You can do that by typing the following commands into the `ucrt64` command line. ``` git clone https://github.com/WizardMac/ReadStat.git @@ -84,15 +84,6 @@ make -j make install ``` -``` -git clone https://github.com/jasp-stats/freexl.git -cd freexl -autoreconf -i -f -./configure --host=x86_64-ucrt-mingw32 --build=x86_64-ucrt-mingw32 -make -j -make install -``` - This will build and install these libraries inside the Rtools44 environment where JASP will look for them. If any of these steps goes wrong, JASP's build system cannot configure the build. #### Adding Rtools44 to your PATH diff --git a/Tools/CMake/Libraries.cmake b/Tools/CMake/Libraries.cmake index 2b6b6c47fc..63b2cc0dd2 100644 --- a/Tools/CMake/Libraries.cmake +++ b/Tools/CMake/Libraries.cmake @@ -289,63 +289,7 @@ if(WIN32) "ReadStat is required for building on Windows, please follow the build instruction before you continue." ) endif() - - # FreeXL library --- - message(CHECK_START "Looking for freexl.dll.a") - find_file( - RTOOLS_LIBFREEXL_DLL_A - NAMES libfreexl.dll.a - PATHS ${RTOOLS_PATH}/lib - NO_DEFAULT_PATH) - - if(EXISTS ${RTOOLS_LIBFREEXL_DLL_A}) - message(CHECK_PASS "found") - message(STATUS " ${RTOOLS_LIBFREEXL_DLL_A}") - else() - message(CHECK_FAIL "not found") - message( - FATAL_ERROR - "FreeXL is required for building on Windows, please follow the build instruction before you continue." - ) - endif() - - message(CHECK_START "Looking for freexl.h") - find_file( - RTOOLS_LIBFREEXL_H - NAMES freexl.h - PATHS ${RTOOLS_PATH}/include - NO_DEFAULT_PATH) - - if(EXISTS ${RTOOLS_LIBFREEXL_H}) - message(CHECK_PASS "found") - message(STATUS " ${RTOOLS_LIBFREEXL_H}") - else() - message(CHECK_FAIL "not found") - message( - FATAL_ERROR - "FreeXL is required for building on Windows, please follow the build instruction before you continue." - ) - endif() - - message(CHECK_START "Looking for libfreexl-1.dll") - find_file( - RTOOLS_LIBFREEXL_DLL - NAMES libfreexl-1.dll - PATHS ${RTOOLS_PATH}/bin - NO_DEFAULT_PATH) - - if(EXISTS ${RTOOLS_LIBFREEXL_DLL}) - message(CHECK_PASS "found") - message(STATUS " ${RTOOLS_LIBFREEXL_DLL}") - else() - message(CHECK_FAIL "not found") - message( - FATAL_ERROR - "FreeXL is required for building on Windows, please follow the build instruction before you continue." - ) - endif() - # End FreeXL library --- - + message(CHECK_START "Looking for zlib1.dll") find_file( RTOOLS_ZLIB_DLL