Чтение и запись в *.xls файл (excel)

Тема в разделе "Общие вопросы по С и С++", создана пользователем AMakar, 15 мар 2007.

Статус темы:
Закрыта.
  1. AMakar

    AMakar Гость

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int main(int argc, char *argv[])
    {
    char a[255];
    float x1[255];
    float y1[255];
    int k;
    int i=0;





    FILE* fin=fopen("in.xls","r");

    while( (fgets(a,254,fin)) != NULL)
    {

    sscanf(a, "%f %f",&x1,&y1);
    printf("%f \n %f\n",x1,y1);
    ++i;

    }
    //fclose(fin);
    k = i;
    i=0;
    FILE* fout=fopen("out.xls","w");
    while(i<k)
    {
    fprintf(fout,"%f \t %f\n",x1,y1);
    ++i;
    }
    fclose(fin);
    fclose(fout);
    system("PAUSE");
    return 0;
    }

    Вот текст тестовой программки. она должна просто из файла in переместить данные в файл out. Перемещаются какие-то непонятные числа. Подскажите пожалуйста, как мне считать данные из талицы?
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--QuoteBegin-AMakar+15:03:2007, 09:31 -->
    <span class="vbquote">(AMakar @ 15:03:2007, 09:31 )</span><!--QuoteEBegin-->Перемещаются какие-то непонятные числа.
    [snapback]59094" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Ну так а что ты хотел? *.xls - это же не простой текстовый файл. Буквально вчера этот вопрос обсуждался. Посмотри соседние ветки
     
  3. AMakar

    AMakar Гость

    Спасибо за подсказку! Но в С есть возможности работы с .xls файлами? Я читаю Кернигана, но там нет исчерпывающею информации..
     
  4. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--QuoteBegin-AMakar+15:03:2007, 12:29 -->
    <span class="vbquote">(AMakar @ 15:03:2007, 12:29 )</span><!--QuoteEBegin-->Я читаю Кернигана, но там нет исчерпывающею информации..
    [snapback]59117" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Что-то я не нашел там такого...
    Однозначно не скажу, но возможно такой способ работал с ранними версиями *.xls файлов. С новыми версиями так просто работать нельзя. Кстати, в чем стоит задача? Если просто прочитать файл, то лучше, проще и быстрее все же воспользоваться СОМ
     
  5. AMakar

    AMakar Гость

    Задача такая - у меня есть таблица данных (2хN), а именно координаты точек. По известным формулам находится вид функции, который эти точки задают и полученные данные нужно поместить обратно в таблицу. Можно запросто использовать *.txt, но если таких таблиц много неудобно будет их копировать в Excel. Лучше, чтобы всё было в *.xls
     
  6. LAW

    LAW Гость

    Единственный мне известный способ работы с файлом Excel - это через ODBC. Необходимо подключить драйвер XLS, сделать алиас для БД а потом работать как с БД.
    Вообще лучше всего было бы работать с OLE/COM сервером Excel он проще, но не знаю поддерживает ли это C++.
     
  7. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Можно еще в csv складывать - Excel потом нормально их берет. С СОМ проблема в том, что это требует самого Excel на машине. Есть коммерческие библиотеки для записи в xls. Вроде на codeproject.com был код для создания простой таблицы в xls.
     
  8. AMakar

    AMakar Гость

    что-то не хочет codeproject.com открываться.. А нельзя ли обойтись без серверов, СОМ и т.д.? ВОт если бы была библиотека работу с Excel, было бы круто. Вот только где найти её?
     
  9. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--QuoteBegin-AMakar+16:03:2007, 10:02 -->
    <span class="vbquote">(AMakar @ 16:03:2007, 10:02 )</span><!--QuoteEBegin-->А нельзя ли обойтись без серверов, СОМ и т.д.?
    [snapback]59212" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Может еще и без программирования? Да поможет тебе Гугль!

    Вот например: http://softsearch.ru/programs/214-838-xls2...-download.shtml
     
  10. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Ну читать это не проблема - я использую в своей программке библиотеку с wordcnv.com - там либ-файл в 30К (!) размером читает doc\xls почти всех версий.
    А писать - вот например:
    http://sm-software.com/pxlsole.htm
     
  11. AMakar

    AMakar Гость

    Что-то у меня плохо получается подключить библиотеку xls21c.dll подскажите плз, как это сделать?
     
  12. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    А с чего ты взял, что тут кто-то ей пользовался? :)
     
  13. AMakar

    AMakar Гость

    Я написал функцию считывания таблицы из csv. Огромное спасибо grigsoft !!!!
     
  14. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--QuoteBegin-AMakar+16:03:2007, 17:54 -->
    <span class="vbquote">(AMakar @ 16:03:2007, 17:54 )</span><!--QuoteEBegin-->Я написал функцию считывания таблицы из csv.
    [snapback]59267" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Ну и зачем тогда было спрашивать конкретно про *.xls? csv - это обычный текстовый файл с разделителями
     
  15. AMakar

    AMakar Гость

    Я уже заканчиваю прогу для csv. Когда доделаю её, я постараюсь разобраться с xls !
     
  16. AMakar

    AMakar Гость

    Код (Text):
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int main(int argc, char *argv[])
    {
    char a[255];
    char x[255];
    char y[255];
    double xx,yy;
    double x1[255];
    double y1[255];
    int i=0,k=0,m=0,s=0;

    for(i=0;i<255;++i)
    {
    x[i]=0;
    y[i]=0;
    y1[i]=0;
    x1[i]=0;
    }  
    i=0;   
    FILE* fin=fopen("in.csv","r");
    while( (fgets(a,254,fin)) != NULL)
    {

    printf("%s",a);
    /*
    ptz = strstr(a,tz);
    printf("%c",ptz);
    */

    while(a[i]!=';')
    {
    x[i]=a[i];
    ++i;
    }  
    i = ++i;
    while(a[i]!='\n')
    {
    y[k] = a[i];
    ++i;
    ++k;
    }
    printf("x:= %s\ny:= %s\n",x,y);
    x1[m]= atof(x);
    y1[m]= atof(y);
    ++m;
    }

    while(s<m)
    {
    printf("x%d:= %f \t y%d:= %f\n",s+1,x1[s],s+1,y1[s]);
    ++s;
    }  


    system("PAUSE");   
    return 0;
    }
    Программа не работает и я, к сожалению, не могу её отладить! Какая-то ошибка с массивами. Программа запускается, но сразу же выключается, если в исходном файле csv больше одной строки!
     
  17. AMakar

    AMakar Гость

    Я уже отладил её! Я забыл индекы обнулять после каждого цикла! Всё отлично работает! Всем огромное спасибо за помощь!
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей