Файлы Р_624 ранее был создан в excel 2003 и с помощью вызова программы xls2htm переделывалась в нужный нам вид. После перехода на excel 2007 программы xls2htm с файлами созданными excel 2007 (Р_622(новый)) пишет , что неправильный формат. Помогите как это устранить. Исходников xls2htm нет.
Файлы Р_624 ранее был создан в excel 2003 и с помощью вызова программы xls2htm переделывалась в нужный нам вид. После перехода на excel 2007 программы xls2htm с файлами созданными excel 2007 (Р_622(новый)) пишет , что неправильный формат. Помогите как это устранить. Исходников xls2htm нет.
Проверил - так и есть. Мне кажется, нужно программу писать заново. Или просто сохранять стандартным способом в html, и где-то были коды/надстройки для сохранения в dbf.
Проверил - так и есть. Мне кажется, нужно программу писать заново. Или просто сохранять стандартным способом в html, и где-то были коды/надстройки для сохранения в dbf.Hugo
Hugo, Что интересно. Если лист созданный в Excel 2007 например Р_622(новый) копируем в чистый лист созданыый в excel 2003 , то с ним все ок. По поводу сохранения стандартным способом в html - нам не подходит, т.к. другая (наша) программа она тут http://files.mail.ru/R1MPW7 тогда не считывает нужные нам данные. Нужно что-бы получался файл именно такой, какой его делал xls2htm. А поповоду (где-то были коды/надстройки для сохранения в dbf) я не понял
Hugo, Что интересно. Если лист созданный в Excel 2007 например Р_622(новый) копируем в чистый лист созданыый в excel 2003 , то с ним все ок. По поводу сохранения стандартным способом в html - нам не подходит, т.к. другая (наша) программа она тут http://files.mail.ru/R1MPW7 тогда не считывает нужные нам данные. Нужно что-бы получался файл именно такой, какой его делал xls2htm. А поповоду (где-то были коды/надстройки для сохранения в dbf) я не понялГость
Лист, созданный 2007, имеет формат XLSX, и пока вы его не сохраните как XLS, он так и будет XLSX. И xls2htm совершенно правильно пишет, что XLSX<>XLS. Причем, если сохраняя его макросом вы не укажете формат файла, а только смените расширение на XLS, файл так и будет XLSX.
Лист, созданный 2007, имеет формат XLSX, и пока вы его не сохраните как XLS, он так и будет XLSX. И xls2htm совершенно правильно пишет, что XLSX<>XLS. Причем, если сохраняя его макросом вы не укажете формат файла, а только смените расширение на XLS, файл так и будет XLSX.RAN
RAN, я сейчас проверить не могу, но вроде там были оба файла xls, но по внутренностям действительно шапки отличались структурой.
Про dbf - там ведь ещё и этот файл генерится. Если Вам нужен только html - то это не сложно простым скриптом/макросом сгенерить. Посмотрите коды по выгрузке данных в текст.
Да и вообще - может быть переделать, чтоб вторая программа брала данные из csv? Туда сохранить можно разными способами - стандартным или макросом. Зачем такое сложное промежуточное звено? Я думал, вы на сайт грузите...
RAN, я сейчас проверить не могу, но вроде там были оба файла xls, но по внутренностям действительно шапки отличались структурой.
Про dbf - там ведь ещё и этот файл генерится. Если Вам нужен только html - то это не сложно простым скриптом/макросом сгенерить. Посмотрите коды по выгрузке данных в текст.
Да и вообще - может быть переделать, чтоб вторая программа брала данные из csv? Туда сохранить можно разными способами - стандартным или макросом. Зачем такое сложное промежуточное звено? Я думал, вы на сайт грузите...Hugo
Объясню проблемму поподробнее. У нас существует программа PROD (состоит из 2-х файлов)http://files.mail.ru/R1MPW7 , она считывает нужную нам информацию из файлов HTM или HTML (накладные->считать ), которые генерирует наша основная программа учета. Небольшой объем учета по определенным причинам находится не в нашей основной программе учета , а в таблицах Excel. Ранее стоял Excell 2003 и тогда мы приводили нужную нам табицу в такой вид как Р_624.xls http://files.mail.ru/R1MPW7 (что-бы были 2 колонки наименование и количество) и с помощью xls2htm http://files.mail.ru/R1MPW7 (она состоит из 5-ти файлов xls2htm, msvcr71.dll, vfp9enu.dll, vfp9r.dll, vfp9rrus.dll) конвертировали ее в Р_624.htm (с четырьмя колонками) и образовывались еще 2 не нужных файла с расширением FPT и DBF. И далее программой PROD считывали нужную нам информацию. После установки Excel 2007 файлы созданыые, такие как Р_622(новый) не поддаются конвертированию с помощью xls2htm - пишет недопустимый формат файла Microsoft Excel. Если лист созданный в Excel 2007 например Р_622(новый) копируем в чистый лист созданыый в excel 2003 , то с ним все ок. Однако все это очень громоздко и неудобно. Кстати если в Excel 2007 файлы сохранять как в формате Excel 2003 , то все равно полученный файл не поддается конвертации с помощью xls2htm.
Quote (Hugo)
Или просто сохранять стандартным способом в html
Это не подходит, т.к. PROD не считывает такой файл.
Quote (RAN)
Лист, созданный 2007, имеет формат XLSX, и пока вы его не сохраните как XLS, он так и будет XLSX. И xls2htm совершенно правильно пишет, что XLSX<>XLS. Причем, если сохраняя его макросом вы не укажете формат файла, а только смените расширение на XLS, файл так и будет XLSX.
А каким макросом его сохранять ? Или как вообще решить эту проблемму ?
Quote (Hugo)
Если Вам нужен только html - то это не сложно простым скриптом/макросом сгенерить. Посмотрите коды по выгрузке данных в текст. Да и вообще - может быть переделать, чтоб вторая программа брала данные из csv? Туда сохранить можно разными способами - стандартным или макросом.
Нужен только HTML , а как и каким скриптом его сгенерить, что-бы PROD считывал ? Или может вообще что-то в самом Prodе подправить, что-бы считывал и HTLM и XLS и XLSX ? (его исходники у нас есть). Помогите плз. Буду очень признателен.
Объясню проблемму поподробнее. У нас существует программа PROD (состоит из 2-х файлов)http://files.mail.ru/R1MPW7 , она считывает нужную нам информацию из файлов HTM или HTML (накладные->считать ), которые генерирует наша основная программа учета. Небольшой объем учета по определенным причинам находится не в нашей основной программе учета , а в таблицах Excel. Ранее стоял Excell 2003 и тогда мы приводили нужную нам табицу в такой вид как Р_624.xls http://files.mail.ru/R1MPW7 (что-бы были 2 колонки наименование и количество) и с помощью xls2htm http://files.mail.ru/R1MPW7 (она состоит из 5-ти файлов xls2htm, msvcr71.dll, vfp9enu.dll, vfp9r.dll, vfp9rrus.dll) конвертировали ее в Р_624.htm (с четырьмя колонками) и образовывались еще 2 не нужных файла с расширением FPT и DBF. И далее программой PROD считывали нужную нам информацию. После установки Excel 2007 файлы созданыые, такие как Р_622(новый) не поддаются конвертированию с помощью xls2htm - пишет недопустимый формат файла Microsoft Excel. Если лист созданный в Excel 2007 например Р_622(новый) копируем в чистый лист созданыый в excel 2003 , то с ним все ок. Однако все это очень громоздко и неудобно. Кстати если в Excel 2007 файлы сохранять как в формате Excel 2003 , то все равно полученный файл не поддается конвертации с помощью xls2htm.
Quote (Hugo)
Или просто сохранять стандартным способом в html
Это не подходит, т.к. PROD не считывает такой файл.
Quote (RAN)
Лист, созданный 2007, имеет формат XLSX, и пока вы его не сохраните как XLS, он так и будет XLSX. И xls2htm совершенно правильно пишет, что XLSX<>XLS. Причем, если сохраняя его макросом вы не укажете формат файла, а только смените расширение на XLS, файл так и будет XLSX.
А каким макросом его сохранять ? Или как вообще решить эту проблемму ?
Quote (Hugo)
Если Вам нужен только html - то это не сложно простым скриптом/макросом сгенерить. Посмотрите коды по выгрузке данных в текст. Да и вообще - может быть переделать, чтоб вторая программа брала данные из csv? Туда сохранить можно разными способами - стандартным или макросом.
Нужен только HTML , а как и каким скриптом его сгенерить, что-бы PROD считывал ? Или может вообще что-то в самом Prodе подправить, что-бы считывал и HTLM и XLS и XLSX ? (его исходники у нас есть). Помогите плз. Буду очень признателен.mihail123
- наймите программиста, который может макросом или лучше скриптом vbs перекинуть данные из Экселя в текст. Начало у текста будет такое:
Code
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META http-equiv=Content-Type content="text/html; charset=windows-1251"> <META content="MSHTML 6.00.2900.3314" name=GENERATOR></HEAD> <BODY><FONT size=+1>Счет N <B>1111</B> от <B>01.01.08</B></FONT> <TABLE borderColor=#a0a0a0 cellSpacing=0 borderColorDark=#ffffff borderColorLight=#a0a0a0 border=1> <TR align=middle bgColor=#c0c0c0> <TD>N</TD> <TD>Наименование товара</TD> <TD>Ед. изм.</TD> <TD>Кол-во</TD> </TR> <TR bgColor=#f0f0f0>
Только мне не понятно, откуда взялось "1111 от 01.01.08" - похоже, что "от фонаря". Ну а дальше Ваши данные, перемежающиеся тэгами и счетчиком строк. Ничего сверхсложного. Может быть и здесь кто-нибудь сделает. Я могу, но некогда, т.к посидеть за этой рутиной часик вероятно нужно.
Если Вы разбираетесь в самом Prodе, то лучше конечно чтобы сразу из xls/xlsx данные брал - меньше хлопот.
P.S. Хотя... Не пожалел часа - написал скрипт. Сохраняет htm в папку с скриптом (можно поменять на другой путь). Для работы нужен установленный Эксель. Можно обрабатывать xls обоих типов, и xlsx/xlsm/xlsb, только у них в названии выходного файла будет лишняя точка. Впрочем, это можно исправить, если важно, но не хотелось код усложнять доп. проверками/ветвлениями. Если обрабатывать будете только xlsx/m/b, то заменить в коде в строке
Code
fname = Left(wb.Name, Len(wb.Name) - 4)
4 на 5. Код можно править в блокноте. Я в нём и писал (Notepad++) Есть небольшая разница от прежней версии. В оригинале количество писалось в поле шириной 14 символов, у меня просто пишется номер, какой есть. Если это будет влиять - исправим.
PP.S. Если нужно из результата выкинуть строки
Code
622 09.08.2011 наименование Продано
то это легко сделать - пустите цикл с 3, а где пишете номер в файл - отнимите 2 Или добавьте проверку на непусто и IsNumeric() для a(i, 2) - тогда эти строки сами не пройдут, останутся только значимые строки. Ещё добавлю - если нужно менять номер счёта и дату, то это тоже несложно добавить в скрипт - вводить оба значения через inputbox, или брать из значения таблицы - например из "624 23.08.2011" P.S. Добавил эту опцию - значения берутся из таблицы. Но если в А1 не будет текста с пробелом - то будет ошибка!
Quote (mihail123)
каким скриптом его сгенерить
- наймите программиста, который может макросом или лучше скриптом vbs перекинуть данные из Экселя в текст. Начало у текста будет такое:
Code
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META http-equiv=Content-Type content="text/html; charset=windows-1251"> <META content="MSHTML 6.00.2900.3314" name=GENERATOR></HEAD> <BODY><FONT size=+1>Счет N <B>1111</B> от <B>01.01.08</B></FONT> <TABLE borderColor=#a0a0a0 cellSpacing=0 borderColorDark=#ffffff borderColorLight=#a0a0a0 border=1> <TR align=middle bgColor=#c0c0c0> <TD>N</TD> <TD>Наименование товара</TD> <TD>Ед. изм.</TD> <TD>Кол-во</TD> </TR> <TR bgColor=#f0f0f0>
Только мне не понятно, откуда взялось "1111 от 01.01.08" - похоже, что "от фонаря". Ну а дальше Ваши данные, перемежающиеся тэгами и счетчиком строк. Ничего сверхсложного. Может быть и здесь кто-нибудь сделает. Я могу, но некогда, т.к посидеть за этой рутиной часик вероятно нужно.
Если Вы разбираетесь в самом Prodе, то лучше конечно чтобы сразу из xls/xlsx данные брал - меньше хлопот.
P.S. Хотя... Не пожалел часа - написал скрипт. Сохраняет htm в папку с скриптом (можно поменять на другой путь). Для работы нужен установленный Эксель. Можно обрабатывать xls обоих типов, и xlsx/xlsm/xlsb, только у них в названии выходного файла будет лишняя точка. Впрочем, это можно исправить, если важно, но не хотелось код усложнять доп. проверками/ветвлениями. Если обрабатывать будете только xlsx/m/b, то заменить в коде в строке
Code
fname = Left(wb.Name, Len(wb.Name) - 4)
4 на 5. Код можно править в блокноте. Я в нём и писал (Notepad++) Есть небольшая разница от прежней версии. В оригинале количество писалось в поле шириной 14 символов, у меня просто пишется номер, какой есть. Если это будет влиять - исправим.
PP.S. Если нужно из результата выкинуть строки
Code
622 09.08.2011 наименование Продано
то это легко сделать - пустите цикл с 3, а где пишете номер в файл - отнимите 2 Или добавьте проверку на непусто и IsNumeric() для a(i, 2) - тогда эти строки сами не пройдут, останутся только значимые строки. Ещё добавлю - если нужно менять номер счёта и дату, то это тоже несложно добавить в скрипт - вводить оба значения через inputbox, или брать из значения таблицы - например из "624 23.08.2011" P.S. Добавил эту опцию - значения берутся из таблицы. Но если в А1 не будет текста с пробелом - то будет ошибка!Hugo