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

  • Автор темы AMakar
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

AMakar

Гость
#1
#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. Перемещаются какие-то непонятные числа. Подскажите пожалуйста, как мне считать данные из талицы?
 
04.09.2006
2 566
2
#2
<!--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 - это же не простой текстовый файл. Буквально вчера этот вопрос обсуждался. Посмотри соседние ветки
 
A

AMakar

Гость
#3
Спасибо за подсказку! Но в С есть возможности работы с .xls файлами? Я читаю Кернигана, но там нет исчерпывающею информации..
 
04.09.2006
2 566
2
#4
<!--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 файлов. С новыми версиями так просто работать нельзя. Кстати, в чем стоит задача? Если просто прочитать файл, то лучше, проще и быстрее все же воспользоваться СОМ
 
A

AMakar

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

LAW

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

grigsoft

Well-Known Member
15.11.2005
735
0
#7
Можно еще в csv складывать - Excel потом нормально их берет. С СОМ проблема в том, что это требует самого Excel на машине. Есть коммерческие библиотеки для записи в xls. Вроде на codeproject.com был код для создания простой таблицы в xls.
 
A

AMakar

Гость
#8
что-то не хочет codeproject.com открываться.. А нельзя ли обойтись без серверов, СОМ и т.д.? ВОт если бы была библиотека работу с Excel, было бы круто. Вот только где найти её?
 
04.09.2006
2 566
2
#9
<!--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
 

grigsoft

Well-Known Member
15.11.2005
735
0
#10
Ну читать это не проблема - я использую в своей программке библиотеку с wordcnv.com - там либ-файл в 30К (!) размером читает doc\xls почти всех версий.
А писать - вот например:
http://sm-software.com/pxlsole.htm
 
A

AMakar

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

AMakar

Гость
#13
Я написал функцию считывания таблицы из csv. Огромное спасибо grigsoft !!!!
 
04.09.2006
2 566
2
#14
<!--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 - это обычный текстовый файл с разделителями
 
A

AMakar

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

AMakar

Гость
#16
Код:
#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 больше одной строки!
 
A

AMakar

Гость
#17
Я уже отладил её! Я забыл индекы обнулять после каждого цикла! Всё отлично работает! Всем огромное спасибо за помощь!
 
Статус
Закрыто для дальнейших ответов.