[C ++]:将数字数据写入ODS文件,ODS不会将它们视为数字

时间:2016-09-15 10:34:52

标签: c++ excel ods

当我通过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;用逗号替换所有点。

1 个答案:

答案 0 :(得分:0)

您正在混淆CSV文件格式,ODS文件格式以及OpenOffice或LibreOffice中两者的表示。

您构建的是CSV文件,这意味着纯文本文件仅包含值的文本表示。默认情况下,C ++程序生成浮点值,点为小数分隔符。

ODS文件实际上是一个包含元数据(创建者姓名,创建日期,最后打印日期等),实际数据和格式信息的ZIP文件。这样,一个ODS文件由LibreOffice或OpenOffice直接打开

您在LibreOffice或OpenOffice中打开 CSV文件,实际上导入它。这意味着程序对数据分隔符,小数分隔符以及日期格式(如果适用)进行一些假设,以将文本值转换为数字(或日期)值。这些假设基于您的系统区域设置。格式通常是默认格式。根据您使用的版本,可能会始终显示带有导入选项的对话框,或仅在您明确导入文件时显示(菜单文件/导入)。该对话框允许您指定CSV文件包含的分隔符和小数分隔符。

正确加载CSV文件后,建议将其保存为ODS格式,以确保不再出现导入问题。