1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/**
* ms-excel.h: MS Excel support for Gnumeric
*
* Author:
* Jody Goldberg (jody@gnome.org)
* Michael Meeks (michael@ximian.com)
*
* (C) 1998-2004 Michael Meeks, Jody Goldberg
**/
#ifndef GNUMERIC_MS_EXCEL_H
#define GNUMERIC_MS_EXCEL_H
#include "ms-biff.h"
#include "ms-excel-biff.h"
#include "ms-container.h"
#include <expr.h>
#include <pango/pango-attributes.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
typedef struct {
Workbook *wb;
Sheet *first, *last;
unsigned supbook;
} ExcelExternSheetV8;
typedef enum {
EXCEL_SUP_BOOK_STD,
EXCEL_SUP_BOOK_SELFREF,
EXCEL_SUP_BOOK_PLUGIN
} ExcelSupBookType;
typedef struct {
ExcelSupBookType type;
Workbook *wb;
GPtrArray *externname;
} ExcelSupBook;
typedef struct {
MSContainer container;
Sheet *sheet;
GHashTable *shared_formulae, *tables;
gboolean freeze_panes;
unsigned active_pane;
GnmFilter *filter;
int biff2_prev_xf_index;
} ExcelReadSheet;
typedef struct {
GnmCellPos key;
guint8 *data;
guint32 data_len;
gboolean is_array;
} XLSharedFormula;
typedef struct {
GnmCellPos key;
guint8 *data;
guint32 data_len;
} XLDataTable;
/* Use the upper left corner as the key to a collection of shared formulas */
XLSharedFormula *excel_sheet_shared_formula (ExcelReadSheet const *sheet,
GnmCellPos const *key);
XLDataTable *excel_sheet_data_table (ExcelReadSheet const *esheet,
GnmCellPos const *key);
typedef struct {
int *red;
int *green;
int *blue;
int length;
GnmColor **gnm_colors;
} ExcelPalette;
typedef struct {
unsigned index;
int height; /* in 1/20ths of a point */
int italic; /* boolean */
int struck_out; /* boolean : strikethrough */
int color_idx;
int boldness; /* 100->1000 dec, normal = 0x190, bold = 0x2bc */
int script; /* sub = -1, none = 0, super = 1 */
MsBiffFontUnderline underline;
char *fontname;
PangoAttrList *attrs;
} BiffFontData;
typedef struct {
unsigned idx;
char *name;
} BiffFormatData;
typedef struct {
char *str;
GnmFormat *markup;
} ExcelStringEntry;
struct _ExcelWorkbook {
MSContainer container;
IOContext *context;
WorkbookView *wbv;
GPtrArray *excel_sheets;
GHashTable *boundsheet_data_by_stream;
GPtrArray *boundsheet_sheet_by_index;
GPtrArray *XF_cell_records;
GHashTable *font_data;
GHashTable *format_table; /* leave as a hash */
struct {
GArray *supbook;
GArray *externsheet;
} v8; /* biff8 does this in the workbook */
ExcelPalette *palette;
unsigned sst_len;
ExcelStringEntry *sst;
ExprTreeSharer *expr_sharer;
Workbook *gnum_wb;
};
char *biff_get_text (guint8 const *ptr, guint32 length, guint32 *byte_length,
MsBiffVersion const ver);
GnmValue *biff_get_error (GnmEvalPos const *pos, guint8 const err);
Sheet *excel_externsheet_v7 (MSContainer const *container, gint16 i);
ExcelExternSheetV8 const *excel_externsheet_v8 (ExcelWorkbook const *wb, gint16 i);
void excel_read_EXTERNSHEET_v7 (BiffQuery const *q, MSContainer *container);
MsBiffBofData *ms_biff_bof_data_new (BiffQuery * q);
void ms_biff_bof_data_destroy (MsBiffBofData * data);
char *ms_biff_get_chars (char const *ptr, size_t length,
gboolean use_utf16);
GnmColor *excel_palette_get (ExcelPalette const *pal, gint idx);
GdkPixbuf *excel_read_IMDATA (BiffQuery *q, gboolean keep_image);
void excel_read_SCL (BiffQuery *q, Sheet *esheet);
/* A utility routine to handle unexpected BIFF records */
void excel_unexpected_biff (BiffQuery *q, char const *state, int debug_level);
void excel_read_cleanup (void);
void excel_read_init (void);
#endif
|