33 {
34 int verbose=0;
if(status!=NULL) verbose=status->
verbose;
35 if(verbose>0) printf("%s()\n", __func__);
36 if(fp==NULL) {
39 }
40 if(par==NULL || par->
tacNr<1 || par->
parNr<1) {
43 }
44
45
46 int colNr=par->
parNr+1;
48 for(
int pi=0; pi<par->
parNr; pi++) {
51 }
56 if(verbose>1) printf(" colNr := %d\n", colNr);
57
58
59 if(verbose>2) printf("writing XML header\n");
60 int n=fprintf(fp, "<?xml version=\"1.0\"?>\n");
61 if(n<1) {
64 }
65 fprintf(fp, "<ss:Workbook xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\">\n");
66 fprintf(fp, " <ss:Styles>\n");
67 fprintf(fp, " <ss:Style ss:ID=\"1\">\n");
68 fprintf(fp, " <ss:Font ss:Bold=\"1\"/>\n");
69 fprintf(fp, " </ss:Style>\n");
70 fprintf(fp, " </ss:Styles>\n");
71 fprintf(fp, " <ss:Worksheet ss:Name=\"Sheet1\">\n");
72 fprintf(fp, " <ss:Table>\n");
73
74
75 for(int i=0; i<colNr; i++) fprintf(fp, " <ss:Column ss:Width=\"80\"/>\n");
76
77
78 if(verbose>2) printf("writing title line\n");
79 fprintf(fp, " <ss:Row ss:StyleID=\"1\">\n");
80 fprintf(fp, " <ss:Cell>\n");
81 fprintf(fp, " <ss:Data ss:Type=\"String\">Parameters</ss:Data>\n");
82 fprintf(fp, " </ss:Cell>\n");
83
85 fprintf(fp, " <ss:Cell>\n");
86 fprintf(fp, " <ss:Data ss:Type=\"String\">Model</ss:Data>\n");
87 fprintf(fp, " </ss:Cell>\n");
88 }
89
90 for(
int pi=0; pi<par->
parNr; pi++) {
92 fprintf(fp, " <ss:Cell>\n");
93 fprintf(fp,
" <ss:Data ss:Type=\"String\">%s</ss:Data>\n", par->
n[pi].
name);
94 fprintf(fp, " </ss:Cell>\n");
95 } else {
96 fprintf(fp, " <ss:Cell>\n");
97 fprintf(fp, " <ss:Data ss:Type=\"String\">%s[%s]</ss:Data>\n",
99 fprintf(fp, " </ss:Cell>\n");
100 }
102 fprintf(fp, " <ss:Cell>\n");
103 fprintf(fp, " <ss:Data ss:Type=\"String\">SD</ss:Data>\n");
104 fprintf(fp, " </ss:Cell>\n");
105 }
107 fprintf(fp, " <ss:Cell>\n");
108 fprintf(fp, " <ss:Data ss:Type=\"String\">95%%CL1</ss:Data>\n");
109 fprintf(fp, " </ss:Cell>\n");
110 fprintf(fp, " <ss:Cell>\n");
111 fprintf(fp, " <ss:Data ss:Type=\"String\">95%%CL2</ss:Data>\n");
112 fprintf(fp, " </ss:Cell>\n");
113 }
114 }
116 fprintf(fp, " <ss:Cell>\n");
117 fprintf(fp, " <ss:Data ss:Type=\"String\">WSS</ss:Data>\n");
118 fprintf(fp, " </ss:Cell>\n");
119 }
121 fprintf(fp, " <ss:Cell>\n");
122 fprintf(fp, " <ss:Data ss:Type=\"String\">Start[min]</ss:Data>\n");
123 fprintf(fp, " </ss:Cell>\n");
124 fprintf(fp, " <ss:Cell>\n");
125 fprintf(fp, " <ss:Data ss:Type=\"String\">End[min]</ss:Data>\n");
126 fprintf(fp, " </ss:Cell>\n");
127 }
129 fprintf(fp, " <ss:Cell>\n");
130 fprintf(fp, " <ss:Data ss:Type=\"String\">DataNr</ss:Data>\n");
131 fprintf(fp, " </ss:Cell>\n");
132 }
134 fprintf(fp, " <ss:Cell>\n");
135 fprintf(fp, " <ss:Data ss:Type=\"String\">FitNr</ss:Data>\n");
136 fprintf(fp, " </ss:Cell>\n");
137 }
138
139 n=fprintf(fp, " </ss:Row>\n");
140 if(n<1) {
143 }
144
145
146 if(verbose>2) printf("writing data table\n");
147 for(
int ri=0; ri<par->
tacNr; ri++) {
148 if(verbose>3) printf(" for region %d\n", 1+ri);
149
150 fprintf(fp, " <ss:Row>\n");
151
152 fprintf(fp, " <ss:Cell>\n");
154 if(senc==NULL) fprintf(fp,
" <ss:Data ss:Type=\"String\">%s</ss:Data>\n", par->
r[ri].
name);
155 else {fprintf(fp, " <ss:Data ss:Type=\"String\">%s</ss:Data>\n", senc); free(senc);}
156 fprintf(fp, " </ss:Cell>\n");
158 fprintf(fp, " <ss:Cell>\n");
159 fprintf(fp,
" <ss:Data ss:Type=\"String\">%s</ss:Data>\n",
modelCode(par->
r[ri].
model));
160 fprintf(fp, " </ss:Cell>\n");
161 }
162 for(
int pi=0; pi<par->
parNr; pi++) {
163 fprintf(fp, " <ss:Cell>\n");
164 if(isnan(par->
r[ri].
p[pi])) fprintf(fp,
" <ss:Data ss:Type=\"Number\"></ss:Data>\n");
165 else fprintf(fp,
" <ss:Data ss:Type=\"Number\">%g</ss:Data>\n", par->
r[ri].
p[pi]);
166 fprintf(fp, " </ss:Cell>\n");
168 fprintf(fp, " <ss:Cell>\n");
169 if(isnan(par->
r[ri].
sd[pi])) fprintf(fp,
" <ss:Data ss:Type=\"Number\"></ss:Data>\n");
170 else fprintf(fp,
" <ss:Data ss:Type=\"Number\">%g</ss:Data>\n", par->
r[ri].
sd[pi]);
171 fprintf(fp, " </ss:Cell>\n");
172 }
174 fprintf(fp, " <ss:Cell>\n");
175 if(isnan(par->
r[ri].
cl1[pi])) fprintf(fp,
" <ss:Data ss:Type=\"Number\"></ss:Data>\n");
176 else fprintf(fp,
" <ss:Data ss:Type=\"Number\">%g</ss:Data>\n", par->
r[ri].
cl1[pi]);
177 fprintf(fp, " </ss:Cell>\n");
178 fprintf(fp, " <ss:Cell>\n");
179 if(isnan(par->
r[ri].
cl2[pi])) fprintf(fp,
" <ss:Data ss:Type=\"Number\"></ss:Data>\n");
180 else fprintf(fp,
" <ss:Data ss:Type=\"Number\">%g</ss:Data>\n", par->
r[ri].
cl2[pi]);
181 fprintf(fp, " </ss:Cell>\n");
182 }
183 }
184
186 fprintf(fp, " <ss:Cell>\n");
187 if(isnan(par->
r[ri].
wss)) fprintf(fp,
" <ss:Data ss:Type=\"Number\"></ss:Data>\n");
188 else fprintf(fp,
" <ss:Data ss:Type=\"Number\">%g</ss:Data>\n", par->
r[ri].
wss);
189 fprintf(fp, " </ss:Cell>\n");
190 }
192 fprintf(fp, " <ss:Cell>\n");
193 if(isnan(par->
r[ri].
start)) fprintf(fp,
" <ss:Data ss:Type=\"Number\"></ss:Data>\n");
194 else fprintf(fp,
" <ss:Data ss:Type=\"Number\">%g</ss:Data>\n", par->
r[ri].
start);
195 fprintf(fp, " </ss:Cell>\n");
196 fprintf(fp, " <ss:Cell>\n");
197 if(isnan(par->
r[ri].
end)) fprintf(fp,
" <ss:Data ss:Type=\"Number\"></ss:Data>\n");
198 else fprintf(fp,
" <ss:Data ss:Type=\"Number\">%g</ss:Data>\n", par->
r[ri].
end);
199 fprintf(fp, " </ss:Cell>\n");
200 }
202 fprintf(fp, " <ss:Cell>\n");
203 fprintf(fp,
" <ss:Data ss:Type=\"Number\">%d</ss:Data>\n", par->
r[ri].
dataNr);
204 fprintf(fp, " </ss:Cell>\n");
205 }
207 fprintf(fp, " <ss:Cell>\n");
208 fprintf(fp,
" <ss:Data ss:Type=\"Number\">%d</ss:Data>\n", par->
r[ri].
fitNr);
209 fprintf(fp, " </ss:Cell>\n");
210 }
211
212 n=fprintf(fp, " </ss:Row>\n");
213 if(n<1) {
216 }
217 }
218
219
220 fprintf(fp, " </ss:Table>\n");
221 fprintf(fp, " </ss:Worksheet>\n");
222 n=fprintf(fp, "</ss:Workbook>\n");
223 if(n<1) {
226 }
227
230}
char * modelCode(const unsigned int i)
int parIsFitRange(PAR *par)
int parSDWithPar(PAR *par, int pi)
int parCLWithPar(PAR *par, int pi)
int parIsDataNr(PAR *par)
void statusSet(TPCSTATUS *s, const char *func, const char *srcfile, int srcline, tpcerror error)
char * strEncodeForXML(const char *s)
char name[MAX_PARNAME_LEN+1]
char name[MAX_TACNAME_LEN+1]
int verbose
Verbose level, used by statusPrint() etc.
@ UNIT_UNKNOWN
Unknown unit.
@ TPCERROR_NO_DATA
File contains no data.
@ TPCERROR_CANNOT_WRITE
Cannot write file.
char * unitName(int unit_code)