Ошибка записи в файл Excel - C ++ - PullRequest
1 голос
/ 29 октября 2019

Когда я отправляю переменную в Excel, она меняет ее значение. Это просто происходит с Excel. Это также происходит, когда переменная хранится в контейнере. Я думаю, это будет более понятно, если вы увидите код:

#include<iostream>
#include<array>
#include<vector>
#include<fstream>

const int aSize{ 150000 };
std::array<double, aSize> anArray{};

int main(void)
{
    double aValue{ 0.00000005467 };
    std::vector<double> aVector;
    for (int i = 0; i < aSize; ++i)
    {
        anArray[i] = aValue;
        aVector.push_back(aValue);
    }

    std::ofstream fileOne, fileTwo, fileThree, fileFour, fileFive;
    fileOne.open("array.xls"); 
    fileTwo.open("array.txt");
    fileThree.open("vector.xls");
    fileFour.open("vector.txt");
    fileFive.open("value.xls");

    fileOne << anArray[0];
    fileTwo << anArray[0];
    fileThree << aVector[0];
    fileFour << aVector[0];
    fileFive << aValue;

    std::cout << aValue << "\n" << anArray[0] << "\n" << aVector[0];

    return 0;
}

Все, что я делаю, это заполняю вектор и массив. Если я печатаю значение переменной, я получаю ожидаемое значение. Если я отправлю его в .txt, я получу ожидаемое значение. Если я отправляю только значение в Excel, я получаю ожидаемое значение.

Все просто ломается, когда я отправляю значение из контейнеров в Excel. Почему это может происходить?

Ответы [ 2 ]

2 голосов
/ 29 октября 2019

Вероятно, здесь проблема в том, как Excel интерпретирует (отформатированный) числовой вывод вашей программы c++. Даже если текст может быть правильным (с точки зрения функции cout), в нем может не быть «правильного» знака десятичной точки (то есть точка вместо запятой или наоборот * 1005). *).

Решение: убедитесь, что Excel настроено на использование того же «языкового стандарта», что и языковой стандарт по умолчанию c++, либо установите для языкового стандарта c++ значение, используемое Excel.

2 голосов
/ 29 октября 2019

Формат файла MS-XLS - это не простой текстовый файл. Вы не можете просто вставить текст в него и ожидать, что он будет отображаться правильно. Вам нужно больше кода и / или специализированных библиотек для взаимодействия с ним.

См. предложения здесь .

...