当我通过C ++中的ofstream将计算导出到ODS(Apache OpenOffice)文件时,数字会在那里正确显示,但是我无法在该特定ODS文件中进行任何计算。
例如,当我尝试添加时,例如A1上的0.9191和A2上的0.5757,= SUM(A1:A2)返回零。
我试图通过格式化单元解决这个问题,但到目前为止还没有工作。有什么建议?谢谢。
编辑:执行导出作业的代码部分。
string datafolder; datafolder = "c:/Users/cousinvinnie/Desktop/Code Vault/ArmaTut3/" + Jvalue;
string graph_path = datafolder + "/Graphavgs.ods"; ofstream graphavgs; graphavgs.open(graph_path);
for(int ctr = 0; ctr<cycledata; ctr++){
cyclepoints = (howmanyDC + 1) * (ctr + 1);
graphavgs<<(ctr + 1)<<" ";
calcguy = sum((wholedata.row(cyclepoints))) / nextgenpop;
secondbiggiesavg(ctr) = -log(calcguy);
graphavgs<<secondbiggiesavg(ctr)<<" ";
calcguy = sum((thirdbiggest.row(cyclepoints))) / nextgenpop;
thirdbiggiesavg(ctr) = -log(calcguy);
graphavgs<<thirdbiggiesavg(ctr)<<" ";
calcguy = sum((matrixavgs.row(cyclepoints))) / nextgenpop;
avgmatrixdata(ctr) = -log(calcguy);
graphavgs<<avgmatrixdata(ctr)<<" "<<endl;
}
graphavgs.close();
此代码创建Graphavgs.ods文件。在那个文件中我有
1 0.111753 0.182331 0.358724
2 0.147015 0.259202 0.48334
3 0.195855 0.362397 0.648719
4 0.25348 0.476696 0.839261
5 0.314722 0.618828 1.0633
6 0.420704 0.857286 1.37501
7 0.536699 1.1179 1.69503
8 0.76933 1.56382 2.13464
9 0.90525 1.89921 2.42443
10 1.15678 2.41533 2.82584
现在这些数字不会被视为数字。当我尝试对它们执行函数时,例如= SUM(A1:A2),返回值为零。
当我做= LN(A1)时,返回值为#VALUE!
解决:查找&amp;用逗号替换所有点。
答案 0 :(得分:0)
您正在混淆CSV文件格式,ODS文件格式以及OpenOffice或LibreOffice中两者的表示。
您构建的是CSV文件,这意味着纯文本文件仅包含值的文本表示。默认情况下,C ++程序生成浮点值,点为小数分隔符。
ODS文件实际上是一个包含元数据(创建者姓名,创建日期,最后打印日期等),实际数据和格式信息的ZIP文件。这样,一个ODS文件由LibreOffice或OpenOffice直接打开。
您在LibreOffice或OpenOffice中打开 CSV文件,实际上导入它。这意味着程序对数据分隔符,小数分隔符以及日期格式(如果适用)进行一些假设,以将文本值转换为数字(或日期)值。这些假设基于您的系统区域设置。格式通常是默认格式。根据您使用的版本,可能会始终显示带有导入选项的对话框,或仅在您明确导入文件时显示(菜单文件/导入)。该对话框允许您指定CSV文件包含的分隔符和小数分隔符。
正确加载CSV文件后,建议将其保存为ODS格式,以确保不再出现导入问题。