34 int verbose=0;
if(status!=NULL) verbose=status->
verbose;
35 if(verbose>0) printf(
"%s()\n", __func__);
40 if(par==NULL || par->
tacNr<1 || par->
parNr<1) {
46 int colNr=par->
parNr+1;
48 for(
int pi=0; pi<par->
parNr; pi++) {
56 if(verbose>1) printf(
" colNr := %d\n", colNr);
59 if(verbose>2) printf(
"writing XML header\n");
60 int n=fprintf(fp,
"<?xml version=\"1.0\"?>\n");
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");
75 for(
int i=0; i<colNr; i++) fprintf(fp,
" <ss:Column ss:Width=\"80\"/>\n");
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");
85 fprintf(fp,
" <ss:Cell>\n");
86 fprintf(fp,
" <ss:Data ss:Type=\"String\">Model</ss:Data>\n");
87 fprintf(fp,
" </ss:Cell>\n");
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");
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");
102 fprintf(fp,
" <ss:Cell>\n");
103 fprintf(fp,
" <ss:Data ss:Type=\"String\">SD</ss:Data>\n");
104 fprintf(fp,
" </ss:Cell>\n");
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");
116 fprintf(fp,
" <ss:Cell>\n");
117 fprintf(fp,
" <ss:Data ss:Type=\"String\">WSS</ss:Data>\n");
118 fprintf(fp,
" </ss:Cell>\n");
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");
129 fprintf(fp,
" <ss:Cell>\n");
130 fprintf(fp,
" <ss:Data ss:Type=\"String\">DataNr</ss:Data>\n");
131 fprintf(fp,
" </ss:Cell>\n");
134 fprintf(fp,
" <ss:Cell>\n");
135 fprintf(fp,
" <ss:Data ss:Type=\"String\">FitNr</ss:Data>\n");
136 fprintf(fp,
" </ss:Cell>\n");
139 n=fprintf(fp,
" </ss:Row>\n");
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);
150 fprintf(fp,
" <ss:Row>\n");
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");
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");
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");
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");
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");
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");
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");
212 n=fprintf(fp,
" </ss:Row>\n");
220 fprintf(fp,
" </ss:Table>\n");
221 fprintf(fp,
" </ss:Worksheet>\n");
222 n=fprintf(fp,
"</ss:Workbook>\n");