Из программы Си++ заполнить Excel-файл

markyzz

то есть банально есть массив - его нужно перенести в Excel-файл. если кто-то делал это, спасибо за совет или пример кода.
Большая просьба: если и посылать, то хотя бы не в гугл, а на ссылки с инфой.
Спасибо.

salora

Значения в строках разделены табуляцией
Новые строки - просто новые строки в текстовом файле.

kruzer25

Я бы даже сказал,

CSV is a delimited data format that has fields/columns separated by the comma character and records/rows separated by newlines. Fields that contain a special character (comma, newline, or double quote must be enclosed in double quotes. However, if a line contains a single entry which is the empty string, it may be enclosed in double quotes. If a field's value contains a double quote character it is escaped by placing another double quote character next to it. The CSV file format does not require a specific character encoding, byte order, or line terminator format.
Each record is one line terminated by a line feed (ASCII/LF=0x0A) or a carriage return and line feed pair (ASCII/CRLF=0x0D 0x0A however, line-breaks can be embedded.
Fields are separated by commas.
1997,Ford,E350
Leading and trailing spaces or tabs, adjacent to commas, are trimmed. This requirement is contentious and in fact is specifically prohibited by RFC 4180, which states, "Spaces are considered part of a field and should not be ignored."
1997, Ford , E350
same as
1997,Ford,E350
Fields with embedded commas must be delimited with double-quote characters.
1997,Ford,E350,"Super, luxurious truck"
Fields with embedded double-quote characters must be delimited with double-quote characters, and the embedded double-quote characters must be represented by a pair of double-quote characters.
1997,Ford,E350,"Super ""luxurious"" truck"
Fields with embedded line breaks must be delimited by double-quote characters.
1997,Ford,E350,"Go get one now
they are going fast"
Fields with leading or trailing spaces must be delimited by double-quote characters. (See comment about leading and trailing spaces above.)
1997,Ford,E350," Super luxurious truck "
Fields may always be delimited by double-quote characters, whether necessary or not.
"1997",Ford,E350
The first record in a csv file may contain column names in each of the fields.
Year,Make,Model
1997,Ford,E350
2000,Mercury,Cougar

kruzer25

Пример:
year,brand,model,comment,price
1997,Ford,E350,"ac, abs, moon",3000.00
1999,Chevy,"Venture ""Extended Edition"""4900.00
1996,Jeep,Grand Cherokee,"MUST SELL!
air, moon roof, loaded",4799.00

sinet

Только в Excel`е вместо ',' используется почему-то ';'.

markyzz

то есть мона прям просто так:
FILE * Orders;
Orders = fopen("order.xls","w");
fprintf(Orders,"year,brand,model,comment,price");
?

kruzer25

Ну типа того, только
fprintf(Orders,concat("year,brand,model,comment,price",EOL;
А потом - данные (и не забудь их ескейпить!)

markyzz

спасиб всем! у меня корректно получилось вот с каким кодом:
FILE * f;
f = fopen("f.xls","w");
fprintf(f,"year\tbrand\tmodel\tcomment\tprice");
fclose(f);

kruzer25

Ага, только это не xls, а "Text (Tab delimited)".
Тебе очень повезло, что автоопределение типа сработало правильно, и вдвойне повезло, что оно вообще сработало для файла с расширением .xls.
Правильное поведение программы просмотра в таком случае - сказать "у вас тут в этом .xls лежит хз что, я не знаю, что это - уберите от меня свой битый .xls-файл, и дайте что-нибудь нормальное".
Так что не трахай себе и другим мозги, а сделай csv.

kokoc88

Так что не трахай себе и другим мозги, а сделай csv.
А завтра ему понадобится форматирование: выделение жЫрным шрифтом, таблички... И пойдёт он читать про COM и ExcellApplication.

kruzer25

А завтра ему понадобится форматирование: выделение жЫрным шрифтом, таблички...
Надо полагать, в Text (Tab Delimited) это можно сделать без проблем?
Тогда уж пусть делает настоящий экселевский файл, а не такую хрень, названную как экселевский файл.

Dasar

> И пойдёт он читать про COM и ExcellApplication.
лучше пусть читает про excelml, благо 2003 excel уже более менее у всех стоит.

markyzz

Да в моей проге ничего сложного не нужно - достаточно заполнить и отправить эксель-файл. А он, как показала практика, нормально читабелен.
(да и изначально я, в принципе и спрашивал об этом, потому что в тот же ворд фиг пойми как грамотно запихать обычную тесктовую инфу)
эксель сейчас мой файл прочитал и не ругнулся - большего мне от него не нужно

kruzer25

эксель сейчас мой файл прочитал и не ругнулся - большего мне от него не нужно
О других людях ты не думаешь?
Или этот файл - для внутреннего употребления?

markyzz

на главном сервере файл прочитали - большего от него не надо
все равно не у всех стоит эксель, поэтому распечатка на других компах будет из txt-файла

kruzer25

Ты сейчас ведёшь себя очень глупо. "Пусть у меня всё через жопу и не по стандарту - но в одном месте работает, и хуй с ним". Ладно бы ещё, если бы сделать нормально требовало каких-то огромных усилий - но сейчас сделать нормально и сделать через жопу требует одинаковых затрат.
все равно не у всех стоит эксель, поэтому распечатка на других компах будет из txt-файла
Ну так сделай .csv!

zya369

Пусть у меня всё через жопу и не по стандарту

все правильно - он же пишет под винду для ескеля

kruzer25

все правильно
Это у тебя предрассудки какие-то.
Да, винда более мягко относится к ошибкам программистов, чем другие ОС. Но это не повод считать, что такие ошибки нужно совершать.

Trofimovyoa

Только в Excel`е вместо ',' используется почему-то ';'
Используется символ, указанный как Разделитель элементов списка в Панель управления/Язык и региональные стандарты/Настройка на закладке Числа. Этот же символ нужно писать в формулах Excel, когда разделяешь параметры.

Alena_08_11

А типа в природе существует эксель неспособный прочитать такой текстовый файл ?

markyzz

Да - глупо
в уже имеющийся эксель файл не получается занести новые данные следующим методом:
goody = fopen("goody.xls","a");
fprintf(goody,"year\tbrand\tmodel\tcomment\tprice\n");
так мона сделать только с файлом, который и делался так же тупо из программы, а мне, как оказалось, нужно заполнять уже имеющийся шаблон.
Никто не может подсказать, как записывать в ячейки уже имеющегося эксель-файла? (который ПРАВИЛЬНЫЙ эксель файл)
(никакое расширение кроме xls использовать нельзя)

kruzer25

так мона сделать только с файлом, который и делался так же тупо из программы
Конечно - потому что файл, который делался так тупо из программы - не является excel-файлом.
Никто не может подсказать, как записывать в ячейки уже имеющегося эксель-файла? (который ПРАВИЛЬНЫЙ эксель файл)
С учётом того, что разные версии экселя хранят информацию в разном формате, ботать стандарт тебе не поможет, это огромное количество геморроя.
Лучше использовать что-то готовое, наверняка есть библиотеки для работы с экселевскими файлами.

markyzz

Забавно - в Builder-е нашел во вкладке Office2k компоненты со словом Excel
думаю, где-нить в этой теме нужно разбираться

sbs-66

Стандарта по экселю нет.
Юзать надо COM-компонетны, установленные экселем.

kruzer25

Стандарта по экселю нет
Неправильно выразился - документация-то по формату есть, тоже в некотором роде стандарт.
Тут жизнь осложняет то, что было несколько версий этих .xls, вроде как, даже без обратной совместимости (то есть, не подойдёт вариант типа "считать .xls-файл как .xls последней версии, и дописать в него данные по её стандарту").

sbs-66

Нет никакой официальной документации. xls - проприетарный закрытый формат.
Есть результаты реверс-инженеринга, которые получены в результате попытки поддержать этот формат в OpenOffice, но никто не гарантирует, что всё работает так, как там написано, и что ничего, что там не написано ты не встретишь.

kruzer25

А кто сказал, что он проприетарный?
Просто вот на pdf и на rtf документация очень даже есть...

sbs-66

Я сказал.
PDF и RTF - открытые форматы, DOC и XLS - закрытые

belorozoff



PDF и RTF - открытые форматы, DOC и XLS - закрытые
Киньте, пожалуйста ссылочку

kruzer25

В википедии ссылка была

sbs-66

Тебе зачем? Там документация на 1600 страниц. И она ещё ссылается на другие документации периодически.

belorozoff

Спасибо, нашел.
2: Хочу научится вытаскивать встроенные в "потоки" файлы из своей программы. И уметь их разжимать тоже. Посмотрел доку — ищу готовое решение

grnat

там геморой, с матрицами экселевскими придется копаться - мой совет поищи какие нить готовые библиотеки или нароботки с работой с эксеклем. Я делал эту хрень на делфях года 2.5 назад. ТОж задача была считывать\заполнять данные в шаблоне экселя. Удачи!
Оставить комментарий
Имя или ник:
Комментарий: