#include "xlhtml.h"
#include
extern void do_cr(void);
extern int center_tables;
extern int first_sheet;
extern int last_sheet;
extern uni_string default_font;
extern void trim_sheet_edges(unsigned int);
extern int next_ws_title;
extern void SetupExtraction(void);
extern void update_default_font(unsigned int);
extern void OutputString(uni_string * );
extern int default_fontsize;
extern char *default_alignment;
extern int aggressive;
extern char *lastUpdated;
extern int file_version;
extern int NoFormat;
extern int notAccurate;
extern int formula_warnings;
extern int disclaimers;
extern int NoHeaders;
extern int NotImplemented;
extern int Unsupported;
extern int MaxWorksheetsExceeded;
extern int MaxRowExceeded;
extern int MaxColExceeded;
extern int MaxStringsExceeded;
extern int MaxFontsExceeded;
extern int MaxPalExceeded;
extern int MaxXFExceeded;
extern int MaxFormatsExceeded;
extern char colorTab[MAX_COLORS][8];
extern char *default_text_color;
extern char *default_background_color;
extern char *default_image;
extern char filename[256];
extern int UnicodeStrings;
extern int CodePage;
extern char *title;
extern void update_default_alignment(unsigned int, int);
extern void output_cell( cell *, int);
extern uni_string author;
extern int null_string(U8 *);
extern unsigned int next_font;
extern int tooold;
work_sheet **ws_array;
font_attr **font_array;
void output_header(void);
void output_footer(void);
void OutputTableHTML(void)
{
int i, j, k;
output_header();
if(tooold)
{
printf("This file was saved in very old version of Excel. Some information can not be extracted.
\n");
}
if (center_tables)
{
printf("");
do_cr();
}
SetupExtraction();
/* Here's where we dump the Html Page out */
for (i=first_sheet; i<=last_sheet; i++) /* For each worksheet */
{
update_default_font(i);
if (ws_array[i] == 0)
continue;
if ((ws_array[i]->biggest_row == -1)||(ws_array[i]->biggest_col == -1))
continue;
if (ws_array[i]->c_array == 0)
continue;
trim_sheet_edges(i);
/* Print its name */
if (next_ws_title > 0)
{
if (ws_array[i]->ws_title.str)
{
printf("");
OutputString(&ws_array[i]->ws_title);
printf("
");
do_cr();
}
else
{
printf("(Unknown Page)
");
do_cr();
}
}
/* Now dump the table */
printf("");
do_cr();
printf("");
do_cr();
for (j=ws_array[i]->first_row; j<=ws_array[i]->biggest_row; j++)
{
update_default_alignment(i, j);
printf("");
else
{
if (strcmp(default_alignment, "left") != 0)
printf(" ALIGN=\"%s\"", default_alignment);
if (!aggressive)
printf(" VALIGN=\"bottom\">\n");
else
printf(">");
}
for (k=ws_array[i]->first_col; k<=ws_array[i]->biggest_col; k++)
{
output_cell(ws_array[i]->c_array[(j*ws_array[i]->max_cols)+k],0); /* This stuff happens for each cell... */
if (ws_array[i]->c_array[(j*ws_array[i]->max_cols)+k])
{
if (ws_array[i]->c_array[(j*ws_array[i]->max_cols)+k]->colspan != 0)
k += ws_array[i]->c_array[(j*ws_array[i]->max_cols)+k]->colspan-1;
}
}
if (!aggressive)
printf("
\n");
}
printf("
");
do_cr();
}
if (center_tables)
{
printf("");
do_cr();
}
/* Print the author's name in itallics... */
if (author.str)
{
printf("Spreadsheet's Author: ");
OutputString(&author);
printf("
");
do_cr();
}
/* Print when & how the file was last updated. */
printf("Last Updated ");
if (lastUpdated)
printf("%s ", lastUpdated);
/*
switch (file_version)
{
case EXCEL95:
printf("with Excel 5.0 or 95");
break;
case EXCEL97:
printf("with Excel 97");
break;
default:
printf("with Excel ????");
break;
}
*/
printf("
");
do_cr();
/* Next print Disclaimers... */
if (NoFormat && disclaimers)
{
printf("
* This cell's format is not supported.
");
do_cr();
}
if ((notAccurate)&&(formula_warnings)&&(disclaimers))
{
printf("
** This cell's data may not be accurate.
");
do_cr();
}
if (NotImplemented && disclaimers)
{
printf("
*** This cell's data type will be supported in the future.
");
do_cr();
}
if (Unsupported && disclaimers)
{
printf("
**** This cell's type is unsupported.
");
do_cr();
}
/* Now out exceeded capacity warnings... */
if (MaxWorksheetsExceeded || MaxRowExceeded || MaxColExceeded || MaxStringsExceeded ||
MaxFontsExceeded || MaxPalExceeded || MaxXFExceeded || MaxFormatsExceeded )
printf("", colorTab[0x0A]);
if (MaxWorksheetsExceeded)
{
printf("The Maximum Number of Worksheets was exceeded. Conversion failed.
");
do_cr();
}
if (MaxRowExceeded)
{
printf("The Maximum Number of Rows was exceeded. Conversion failed.
");
do_cr();
}
if (MaxColExceeded)
{
printf("The Maximum Number of Columns was exceeded. Conversion failed.
");
do_cr();
}
if (MaxStringsExceeded)
{
printf("The Maximum Number of Strings was exceeded. Conversion failed.
");
do_cr();
}
if (MaxFontsExceeded)
{
printf("The Maximum Number of Fonts was exceeded. Conversion failed.
");
do_cr();
}
if (MaxPalExceeded)
{
printf("The Maximum Number of Color Palettes was exceeded. Conversion failed.
");
do_cr();
}
if (MaxXFExceeded)
{
printf("The Maximum Number of Extended Formats was exceeded. Conversion failed.
");
do_cr();
}
if (MaxFormatsExceeded)
{
printf("The Maximum Number of Formats was exceeded. Conversion failed.
");
do_cr();
}
if (MaxWorksheetsExceeded || MaxRowExceeded || MaxColExceeded || MaxStringsExceeded ||
MaxFontsExceeded || MaxPalExceeded || MaxXFExceeded || MaxFormatsExceeded )
printf("");
do_cr();
/* Output Tail */
output_footer();
}
void output_header(void)
{ /* Ouput Header */
if (NoHeaders)
return;
if (!aggressive)
{
printf("");
do_cr();
}
printf("");
do_cr();
printf("", CodePage);
else
{
switch (UnicodeStrings)
{
case 0:
printf("iso-8859-1\">"); /* Latin-1 */
break;
case 1:
printf("windows-1252\">"); /* Microsoft */
break;
default:
printf("utf-8\">"); /* Unicode */
break;
}
}
do_cr();
if (!aggressive)
{
printf("");
do_cr();
}
printf("");
if (title)
printf("%s", title);
else
printf("%s", filename);
printf("");
do_cr();
printf("");
do_cr();
printf("");
do_cr();
do_cr();
printf("
");
do_cr();
}
void output_footer(void)
{
if (NoHeaders)
return;
printf("");
do_cr();
fflush(stdout);
}
void output_start_html_attr(html_attr *h, unsigned int fnt_idx, int do_underlines)
{
if (fnt_idx < next_font)
{
if (((font_array[fnt_idx]->underline&0x0023) > 0)&&(do_underlines))
{
printf("");
h->uflag = 1;
}
if (font_array[fnt_idx]->bold >= 0x02BC)
{
h->bflag = 1;
printf("");
}
if (font_array[fnt_idx]->attr & 0x0002)
{
h->iflag = 1;
printf("");
}
if (font_array[fnt_idx]->attr & 0x0008)
{
h->sflag = 1;
printf("");
}
if ((font_array[fnt_idx]->super & 0x0003) == 0x0001)
{
h->spflag = 1;
printf("");
}
else if ((font_array[fnt_idx]->super & 0x0003) == 0x0002)
{
h->sbflag = 1;
printf("");
}
}
}
void output_end_html_attr(html_attr *h)
{
if (h->sbflag)
{
printf("");
h->sbflag = 0;
}
else if (h->spflag)
{
printf("");
h->spflag = 0;
}
if (h->sflag)
{
printf("");
h->sflag = 0;
}
if (h->iflag)
{
printf("");
h->iflag = 0;
}
if (h->bflag)
{
printf("");
h->bflag = 0;
}
if (h->uflag)
{
if (h->uflag == 1)
printf("");
else
printf("");
h->uflag = 0;
}
}