67 {
68 int verbose=0;
if(status!=NULL) verbose=status->
verbose;
69 if(verbose>0) printf("%s(%s)\n", __func__, sheetname);
70 if(fp==NULL) {
73 }
77 }
78
79 char tunit[128], cunit[128];
82
83
84 if(verbose>2) printf("constructing TAC names\n");
86
87
88 {
89 int n=0;
90 n=fprintf(fp, " <ss:Worksheet ss:Name=\"%s\">\n", sheetname);
91 n+=fprintf(fp, " <ss:Table>\n");
92 if(n<10) {
95 }
96 }
97
98
99 {
103 for(int i=0; i<n; i++) fprintf(fp, " <ss:Column ss:Width=\"80\"/>\n");
104 }
105
106
107 fprintf(fp, " <ss:Row ss:StyleID=\"1\">\n");
109 fprintf(fp, " <ss:Cell>\n");
110 fprintf(fp, " <ss:Data ss:Type=\"String\">time[%s]</ss:Data>\n", tunit);
111 fprintf(fp, " </ss:Cell>\n");
112 } else {
113 fprintf(fp, " <ss:Cell>\n");
114 fprintf(fp, " <ss:Data ss:Type=\"String\">start[%s]</ss:Data>\n", tunit);
115 fprintf(fp, " </ss:Cell>\n");
116 fprintf(fp, " <ss:Cell>\n");
117 fprintf(fp, " <ss:Data ss:Type=\"String\">end[%s]</ss:Data>\n", cunit);
118 fprintf(fp, " </ss:Cell>\n");
119 }
120 for(
int ri=0; ri<tac->
tacNr; ri++) {
121
122 fprintf(fp, " <ss:Cell>\n");
124 fprintf(fp,
" <ss:Data ss:Type=\"String\">%s[%s]</ss:Data>\n", tac->
c[ri].
name, cunit);
125 else
126 fprintf(fp,
" <ss:Data ss:Type=\"String\">%s</ss:Data>\n", tac->
c[ri].
name);
127 fprintf(fp, " </ss:Cell>\n");
128 }
130 fprintf(fp, " <ss:Cell>\n");
131 fprintf(fp, " <ss:Data ss:Type=\"String\">weight</ss:Data>\n");
132 fprintf(fp, " </ss:Cell>\n");
133 }
134 if(fprintf(fp, " </ss:Row>\n")<1) {
137 }
138
139
140 if(verbose>2) printf("writing data table\n");
141 for(
int fi=0; fi<tac->
sampleNr; fi++) {
142
143 fprintf(fp, " <ss:Row>\n");
144
145
146
147
148
149 double v;
if(tac->
isframe==0) v=tac->
x[fi];
else v=tac->
x1[fi];
150 fprintf(fp, " <ss:Cell>\n");
151 if(isnan(v)) fprintf(fp, " <ss:Data ss:Type=\"String\"></ss:Data>\n");
152 else fprintf(fp, " <ss:Data ss:Type=\"Number\">%g</ss:Data>\n", v);
153 fprintf(fp, " </ss:Cell>\n");
154
157 fprintf(fp, " <ss:Cell>\n");
158 if(isnan(v)) fprintf(fp, " <ss:Data ss:Type=\"String\"></ss:Data>\n");
159 else fprintf(fp, " <ss:Data ss:Type=\"Number\">%g</ss:Data>\n", v);
160 fprintf(fp, " </ss:Cell>\n");
161 }
162
163
164 for(
int ri=0; ri<tac->
tacNr; ri++) {
165 fprintf(fp, " <ss:Cell>\n");
166 if(isnan(tac->
c[ri].
y[fi])) fprintf(fp,
" <ss:Data ss:Type=\"String\"></ss:Data>\n");
167 else fprintf(fp,
" <ss:Data ss:Type=\"Number\">%g</ss:Data>\n", tac->
c[ri].
y[fi]);
168 fprintf(fp, " </ss:Cell>\n");
169 }
170
171
173 fprintf(fp, " <ss:Cell>\n");
174 if(isnan(tac->
w[fi])) fprintf(fp,
" <ss:Data ss:Type=\"String\"></ss:Data>\n");
175 else fprintf(fp,
" <ss:Data ss:Type=\"Number\">%g</ss:Data>\n", tac->
w[fi]);
176 fprintf(fp, " </ss:Cell>\n");
177 }
178
179 fprintf(fp, " </ss:Row>\n");
180 }
181
182
183 fprintf(fp, " </ss:Table>\n");
184 if(fprintf(fp, " </ss:Worksheet>\n")<1) {
187 }
188
191}
void statusSet(TPCSTATUS *s, const char *func, const char *srcfile, int srcline, tpcerror error)
char name[MAX_TACNAME_LEN+1]
int verbose
Verbose level, used by statusPrint() etc.
void tacEnsureNames(TAC *tac)
int tacIsWeighted(TAC *tac)
@ TPCERROR_NO_DATA
File contains no data.
@ TPCERROR_CANNOT_WRITE
Cannot write file.
char * unitName(int unit_code)