Vbs создать файл excel
Есть три способа создания пустого текстового файла (иногда называемого как «text stream»).
Первый способ — это использование метода CreateTextFile. В следующем примере показано, как создать текстовый файл, используя этот метод: Пример использования данного метода см. в разделе «3.7. Пример работы с объектом FileSystemObject».
Второй способ — это использование метода OpenTextFile объекта FileSystemObject с набором флагов ForWriting. В следующем примере показано, как создать текстовый файл, используя этот метод: Третий способ — это использование метода OpenAsTextStream с набором флагов ForWriting. В следующем примере показано, как создать текстовый файл, используя этот метод:
Добавление данных в файл
- Открыть текстовый файл
- Записать данные
- Закрыть файл
Для записи данных в текстовый файл используйте методы Write, WriteLine или WriteBlankLines объекта TextStream, в зависимости от задач, описанных в приведённой ниже таблице:
Задача | Метод |
Запись данных в текстовый файл без символа перехода на новую строку в конце | Write |
Запись данных в текстовый файл с символом перехода на новую строку в конце | WriteLine |
Запись одной или более пустых строк в открытый текстовый файл | WriteBlankLines |
Для закрытия текстового файла используйте метод Close объекта TextStream. Закрыть файл можно также методом Close объекта FileSystemObject. Пример использования данных методов см. в разделе «3.7. Пример работы с объектом FileSystemObject».
ПРИМЕЧАНИЕ
Символ новой строки содержит символ или символы (зависит от операционной системы) для перевода курсора в начало новой строки (возврат каретки/перевод строки). Следует учитывать, что некоторые строки уже могут иметь в конце эти непечатаемые символы.
В следующем примере показано, как выполняется запись данных в открытый файл всеми тремя методами, затем файл закрывается:
Чтение файлов
Для чтения данных из файла используйте методы Read, ReadLine или ReadAll объекта TextStream. Эти методы и задачи, решаемые с их помощью, описаны в приведённой ниже таблице:
Задача | Метод |
Чтение указанного количества символов из файла | Read |
Чтение полной строки из файла (до символа конца строки, но не включая его) | ReadLine |
Чтение всего содержимого файла | ReadAll |
Пример использования данных методов см. в разделе «3.7. Пример работы с объектом FileSystemObject».
Если вы используете методы Read или ReadLine и хотите пропустить определённую часть данных, то используйте методы Scip или ScipLine. Полученный в результате работы этих методов текст может быть сохранён в строку, которую можно отобразить на экране в элементе управления, передать в качестве параметра в строковую функцию (например, в Left, Right или Mid), соединить с другой строкой и т.п.
В следующем примере показано, как открыть файл, записать в него данные, а затем прочитать их:
Перемещение, копирование и удаление файлов
Объектная модель FSO имеет для каждой из операций перемещения, копирования или удаления файлов по два метода. Эти методы и задачи, решаемые с их помощью, описаны в приведённой ниже таблице:
Задача | Метод |
Перемещение файла | File.Move или FileSystemObject.MoveFile |
Копирование файла | File.Copy или FileSystemObject.CopyFile |
Удаление файла | File.Delete или FileSystemObject.DeleteFile |
Пример использования данных методов см. в разделе «3.7. Пример работы с объектом FileSystemObject».
В следующем примере создаётся текстовый файл в корневом каталоге диска С, записывается в него некоторая информация. Затем файл перемещается в директорию с именем \tmp, копируется в директорию \temp, а затем удаляются копии из обеих директорий.
Для проверки работы этого примера создайте в корневом каталоге диска С директории tmp и temp.
Use VBScript to create, open, and edit excel files. ( Excel needs to be installed on your computer ).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
'Microsoft Excel Automation Basics |
':: Create and edit an Excel File. |
'--------------------------------- |
'create the excel object |
Set objExcel = CreateObject( "Excel.Application" ) |
'view the excel program and file, set to false to hide the whole process |
objExcel.Visible = True |
'add a new workbook |
Set objWorkbook = objExcel.Workbooks.Add |
'set a cell value at row 3 column 5 |
objExcel.Cells( 3 , 5 ).Value = "new value" |
'change a cell value |
objExcel.Cells( 3 , 5 ).Value = "something different" |
'delete a cell value |
objExcel.Cells( 3 , 5 ).Value = "" |
'get a cell value and set it to a variable |
r3c5 = objExcel.Cells( 3 , 5 ).Value |
'save the new excel file (make sure to change the location) 'xls for 2003 or earlier |
objWorkbook.SaveAs "C:\Users\UserName\Desktop\vbsTest.xlsx" |
'close the workbook |
objWorkbook.Close |
'exit the excel program |
objExcel.Quit |
'release objects |
Set objExcel = Nothing |
Set objWorkbook = Nothing |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Я пытаюсь запустить макрос Excel из-за пределов файла Excel. В настоящее время я использую ".vbs" файл из командной строки, но он продолжает говорить мне, что макрос не может быть найден. Вот script Я пытаюсь использовать
И вот макрос, к которому я пытаюсь получить доступ:
EDIT: Excel 2003.
Хорошо, это на самом деле просто. Предполагая, что ваш макрос находится в модуле, а не на одном из листов, вы используете:
Для имени файла с пробелами помещайте имя файла в кавычки.
Если вы разместили макрос под листом, скажем, sheet1, просто предположите, что sheet1 владеет функцией, которую она выполняет.
Примечание. Вам не нужна нотация macro.testфункции, которую вы использовали.
Думаю, вы пытаетесь это сделать? (ИСПЫТАНИЕ И ИСПЫТАНИЕ)
Этот код откроет файл Test.xls и запустит макрос TestMacro , который, в свою очередь, напишет в текстовый файл TestResult.txt
Я попытался адаптировать код @Siddhart к относительному пути для запуска моего макроса open_form , но он, похоже, не работал. Это была моя первая попытка. Мое рабочее решение ниже.
ИЗМЕНИТЬ
Я действительно отработал это, на всякий случай, когда кто-то хочет запустить пользовательскую форму "подобно" автономному приложению:
Проблемы, с которыми я столкнулся:
1 - Я не хотел использовать событие Workbook_Open, поскольку excel заблокирован только для чтения.
2 - Команда партии ограничена тем фактом, что (насколько мне известно) она не может вызвать макрос.
Сначала я написал макрос, чтобы запустить мою пользовательскую форму, скрывая приложение:
Затем я создал vbs для запуска этого макроса (выполнение этого с относительным путем было сложным):
И я, наконец, сделал пакетный файл для выполнения VBS.
Обратите внимание, что я также включил "Установить обратно в видимый" в мой Userform_QueryClose :
В любом случае, спасибо за вашу помощь, и я надеюсь, что это поможет, если кому-то это понадобится
Excel 2010, Win 7
Я попробовал вышеуказанные методы, но я получил ошибку "macro not found".
Это окончательный код, который сработает!
В моем случае MyMacro находится под Sheet1, таким образом Sheet1.MyMacro.
я пытаюсь сделать loading.jpg появляться, пока vbsricpt запускает vba excel. и в конце скрипта loading.jpg закроется и на экране появится надпись "Завершено".
Привет, я использовал этот поток, чтобы получить решение, тогда я хотел бы поделиться тем, что я сделал на случай, если кто-то сможет его использовать.
То, что я хотел, - это вызвать макрос, который меняет некоторые ячейки и стирает некоторые строки, но мне нужно было более 1500 excels (приблизительно потратил 3 минуты для каждого файла)
Основная проблема:
Когда вы вызывали макрос из vbe, у меня была та же проблема, было невозможно вызвать макрос из PERSONAL.XLSB, когда script отклонил excel, не выполнил personal.xlsb и не был какой-либо опцией в окне макроса
Я решил это, сохранив один файл excel с загруженным макросом (a.xlsm) (перед выполнением script)
Небольшой топик-шпаргалка для быстрого написания скриптов для автоматической обработки документов ms office'а. А так же для помощи в преодолении синдрома чистого листа.
Как правильно заметили в недавнем топике, сама работа скрипта может быть и не быстрой, но чаще важнее сам результат, да и объёмы далеко не всегда такие большие. Зато Automation позволяет написать скрипт практически на любом языке. Здесь я выдам заготовки для JavaScript и IronPython, но, надеюсь, в комментариях найдётся место и для других языков (например, на PowerShell).
Чуть-чуть лирики
- MS Office (если есть документы, то он, видимо, есть/будет установлен)
- Интерпретатор выбранного языка (для JS, VBS и PowerShell этот пункт не актуален)
- Ещё раз MS Office для подглядывание за генерацией кода в VBA (в записываемых макросах)
Собственно, код
Имхо, самый разумный вариант — это JScript или VBScript (точнее Windows script host), т.к. интерпретатор уже идёт с операционной системой, и можно раздавать скрипт друзьям/коллегам, не требуя от них никаких дополнительных действий — перетащил xls(x)-файл на скрипт в explorer'е и работа пошла:
Главный недостаток — сложно отлаживаться (только что убил полчаса на цикл for — нумерация с 0 выдавала ошибку о пропущенной точке с запятой).
Но если цель — написать быстро, а JS/VBS известны гораздо хуже родного и знакомого питона, то (IronPython):
Немного полезных фактов
Самая главная подсказка — редактор макросов в Excel. Записываем действие, которое хотим выполнить (View -> Macros -> Record macro. , имя значения не имеет), открываем его код (View -> Macros -> View macros. ) и делаем по образу и подобию. Сама запись макроса — просто набор действий, которые хочется автоматизировать. Например, вставить или изменить какое-то значение, поменять цвет/шрифт и т.п. Запись макроса лучше производить в отдельном документе, во избежание.
Для лучшей ориентации в мире объектов объектном мире Excel — система классов (тоже самое, но для Office 2010).
P.S. Где-то у меня был код для работы с Automation из C++, но это уже совсем другая история :)
Необходимо преобразовать его в формат xls. Просомтрел всю документацию по VBScript, но ничего толкового не нашел.
Также половину интернета перерыл Причем необходимо, сделать так, чтобы строки в каждом блоке стали столбцами, возможно ли такое?
Пожалуйста помогите, кто чем может. Буду очень благодарен.
2 Ответ от tankist 2011-04-28 12:30:42 (изменено: tankist, 2011-04-28 12:32:11)
Доброго дня.
Имхо, проще вставить текст в Excel, предварительно его обработав в блокноте (ну там, удалить лишние пробелы, сделать пустые строки - пустыми и т.д.) и обработать текст вручную - формулами или макросом. Макрос однозначно будет проще, чем писать скрипт по "подаче" этих данных в екслель, плюс потом пакеткая обработка.
Элементарно это сделать с помощью формул. Допустим, указанные данные начинаются в ячейке A2, тогда в ячейку B2 вставляется формула:
Растягиваем на 3 столбца вправо, потом вниз, и вуаля - данные из столбца в стоках. Можно еще и проверку на 0 сделать, если количество непрерывных строк бывает разным (в указанном примере 4 строки - пробел, 4 строки - пробел):
Останется только удалить "лишние" строки, но это делается без скриптов - прочтите справку по кнопке "Выделение группы ячеек. "
3 Ответ от Pitkin 2011-04-28 13:03:59
Я так понимаю, что сам текстовый файл, просто импортировать ручками из Excel?
Просто задача состоит в том, что бы в определенное время суток автоматически выполнялся скрипт, который будет брать данные строки из текстового файла, затем переносить их в файл xls формата и выкладывать на сетевой ресурс. Все данные задачи уже решены, кроме преобразования текстового файла в файл Excel.
4 Ответ от Dmitrii 2011-04-28 13:30:02 (изменено: Dmitrii, 2011-04-28 13:34:19)
. скрипт, который будет брать данные строки из текстового файла, затем переносить их в файл xls формата <. >Все данные задачи уже решены, кроме преобразования текстового файла в файл Excel.
1. Непонятно, зачем вообще какие-то преобразования, когда уже есть сценарий, который "умеет" обрабатывать текстовый файл и формировать рабочую книгу.
2. Непонятно, зачем Вам именно формат XLS. Если только для того, чтобы файл с данными был автоматически связан с приложением Excel и распознавался им как "свой", то достаточно задать исходному текстовому файлу расширение CSV.
5 Ответ от Pitkin 2011-04-28 13:35:42 (изменено: Pitkin, 2011-04-28 13:38:29)
Да, можно сделать и так. Извините в первом посте забыл указать, что преобразование нужно с целью изменения строк в столбцы, то есть
Есть текстовый документ txt, в котором находятся данные в таком виде:
------------
Строка 1
Строка 2
Строка 3
Строка 1
Строка 2
Строка 3
Строка 1
Строка 2
Строка 3
------------
Как данный документ импортировать в excel чтобы данные приняли вид таблицы
из трех столбцов
Строка1 Строка2 Строка3
Строка1 Строка2 Строка3
. . .
Строка1 Строка2 Строка3
Хотя, в excel можно не импортировать, просто, чтобы в самом файле csv строки автоматически становились столбцами, подскажите пожалуйста если кто знает.
Попробую пока с формулами в самом excele поколдовать.
6 Ответ от Dmitrii 2011-04-28 13:42:44
. чтобы в самом файле csv строки автоматически становились столбцами.
Приведите содержимое текстового файла к виду
Строка 1;Строка 2;Строка 3
Строка 1;Строка 2;Строка 3
Строка 1;Строка 2;Строка 3
7 Ответ от Pitkin 2011-04-28 13:48:18 (изменено: Pitkin, 2011-04-28 13:59:20)
Эх, если бы я знал как. Если честно сказать, то это мой второй скрипт в жизни
Я вчера целый день писал код как из 300 текстовых файлов собрать все данные в один, вроде получилось
Для меня как новичка это подвиг
Код:
Dim objFSO: Set objFSO = CreateObject("Scripting.FileSystemObject")JoinTXT "C:\tmp"
Sub JoinTXT(strFolderPath)
Dim objFolder, objFile, strTempText, strAllTextIf objFSO.FolderExists(strFolderPath) Then
Set objFolder = objFSO.GetFolder(strFolderPath)
For Each objFile In objFolder.Files
strExt = LCase(objFSO.GetExtensionName(objFile.Path))
If (strExt = "") Or (strExt = "log") Then
strTempText = ReadFile(objFile.Path)
If strTempText <> "" Then
strAllText = strAllText & strTempText & vbCrLf
'& vbCrLf "===== " & objFile.Name & " =====" & Разделение между строк
End If
'objFile.Delete True ' удалить файл
End If
Next
End IfSet objFile = objFSO.CreateTextFile(strFolderPath & "\AllTextFiles.txt")
objFile.Write strAllText
objFile.Close
End SubMsgBox "Результирующий файл сформирован"
Set objFSO = Nothing
Wscript.quitFunction ReadFile(strTempFilePath)
On Error Resume NextDim objTempFile, strText
Set objTempFile = objFSO.OpenTextFile(strTempFilePath, 1, False)
strText = objTempFile.Readall
objTempFile.CloseReadFile = strText
End Function
Правда не без помощи документации и интернета
8 Ответ от BeS Yara 2011-04-28 14:09:06
- BeS Yara
- Разработчик
- Неактивен
Преобразовать в csv достаточно просто(при условии что формат файла именно такой как приведён в первом посте):
Это "скелет" - без проверок наличия файлов, папок, доступности файлов на запись.
Если требуется именно эксель, то вместо записи в текстовой файл обрабатываем записи поэлементно. Например так:
Вместо вывода в консоль, пишем в ячейки(i, j тут как раз пригодятся ) используя экселевский объект.
P.S. "On Error Resume Next" есть, а где "On Error GoTo 0"? Ошибки нужно обрабатывать а не игнорировать
9 Ответ от Pitkin 2011-04-28 14:24:19 (изменено: Pitkin, 2011-04-28 14:30:03)
Спасибо, огромное, я тут поколдовал немного, и решил этот вопрос проще, в строке с моим кодом где указывается результирующий файл
Set objFile = objFSO.CreateTextFile(strFolderPath & "\AllTextFiles.txt")
Просто поменял расширение, txt на xls и о чудо, формирует xls файл.
Сейчас попробую поковырять ваш код
Я так понял, что вторая часть кода, это как раз то, что нужно для преобразования строк в столбцы?
Не могли бы вы объяснить как это работает, а то не могу понять куда этот кусок вставлять в мой код
10 Ответ от tankist 2011-04-28 14:26:27
Просто задача состоит в том, что бы в определенное время суток автоматически выполнялся скрипт, который будет брать данные строки из текстового файла, затем переносить их в файл xls формата и выкладывать на сетевой ресурс. Все данные задачи уже решены, кроме преобразования текстового файла в файл Excel.
Мне кажется, можно немного перефразировать задачу - создать excel файл c актуальными данными из текстового источника, требующий дополнительных операций преобразований. Есть два пути решения:
1. (Ваш) Создать скрипт, который будет выполняться по таймингу в определенное время и будет выполнять операции: (а) преобразовать данные; (б) создать xls файл; (в) выкладывать результат на определенный ресурс.
2. Создать файл c эксель импортом данных (теперь понятно, что без vba - никуда), который будет автоматически брать последние данные по запросу пользователя (например - "при открытии").
11 Ответ от tankist 2011-04-28 14:31:01
Пока неспеша "строчил" ответ, уже написали рабочий пример скрипта. BeS Yara, спасибо, мне тоже пригодится.
12 Ответ от BeS Yara 2011-04-28 14:53:17
- BeS Yara
- Разработчик
- Неактивен
Просто поменял расширение, txt на xls и о чудо, формирует xls файл.
Это была шутка?
Если нет, то Вы ставите меня в тупик(состояние более известное как "разрыв шаблона").
По поводу второго куска кода, это была часть замены. Вот что подразумевалось(вчерне):
WSH: преобразуем макрос VBA в скрипт VBScrip, а также поиск по форуму на тему "Excel.Application" даст достаточно много примеров работы с Excel.
13 Ответ от Pitkin 2011-04-28 15:12:38 (изменено: Pitkin, 2011-04-28 15:29:51)
Со сменой расширения я тоже был крайне удивлен, но это действительно работает, можете опробовать
Кажется я понял, как работает ваш код, только для того, чтобы он работал нужно, чтобы присутствовал пустой файл Книга1.xls
А если будут поступать новые данные, то они будут дополняться, а не затираться, это очень удобно, спасибо огромное
P.S. С меня 83103 литра пива
14 Ответ от BeS Yara 2011-04-28 15:38:16 (изменено: BeS Yara, 2011-04-28 15:39:17)
- BeS Yara
- Разработчик
- Неактивен
CreateTextFile создаёт текстовый файл. XLS - бинарный файл.
То что эксель правильно открыл переименованный текстовой файл не делает тот файл экселевским. Просто удачно сработал конвертер(excel умеет принимать текстовые форматы, хотя не всегда правильно). Переименованный csv(полученный из скрипта) открывается не совсем верно - по строке в ячейку.
Более того - если далее файл будет обрабатываться автоматически, возможны проблемы. Мне как-то подсунули таблицу сохранённую в html-виде, но с расширением XLS - я долго не мог понять почему эксель файл открывает, а скрипт нет. Пока по F3 его не посмотрел. Убил бы!
Далее:
1. наличие файла Книга1.xls не обязательно
2. он не дописывается, а перезаписывается
Скрипт открывает невидимое окно Excel, записывает туда данные, сохраняет в указанный в скрипте файл и закрывает окно Excel. Если нужно дописывать данные, то необходимо открывать этот файл, находить конец данных, и записывать дальше новые. Мой вариант этого не делает.
15 Ответ от Pitkin 2011-04-28 22:52:53
Всем огромное спасибо, за помощь и за ссылки выложенные здесь. Правда всё еще не осилил Но как говорится, учение - свет, неучение - тень. Теперь буду пытаться полностью автоматизировать процесс, чтобы данные не перезаписывались, а пополнялись сами, ну чтобы на работу ходить только в день зарплаты
P.S. BeS Yara Все равно наличие файла Книга1.xls требует, не могу понять почему, но буду разбираться, все впереди.
Еще раз всем спасибо, УДАЧИ .
16 Ответ от Slav 2011-04-29 09:34:09
.
Просто поменял расширение, txt на xls и о чудо, формирует xls файл.
.
Еще раз убедился - темы "новичков" таят много интересного.
Мне бы сделать такое даже в голову не пришло - но ведь это работает!
Может пригодиться - спасибо, Pitkin.
17 Ответ от BeS Yara 2011-04-29 12:31:19
- BeS Yara
- Разработчик
- Неактивен
Pitkin, есть файл Книга1.xls - он будет перезаписан, Нет файла Книга1.xls - он будет создан. Можете пояснить что значит "Все равно наличие файла Книга1.xls требует" - в чём это проявляется?
Slav, если в первом моём примере скрипта(где вывод идёт в текстовый файл) поменять расширение на xls, то на выходе будет текстовый файл(" файл1 "):
Экселевский файл с этими-же данными будет выглядеть примерно так(кусок, все 5к приводить не буду):
РПаЎ±б > юя юяяя яяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяя юяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяR o o t E n t r y яяяяяяяя А F а
ECМ W o r k b o o k яяяяяяяяяяяя
Если открыть экселем текстовый файл " файл1 ", то результат будет отнюдь не тот что ожидался - с данными будет только первая колонка, в каждой ячейки которой помещена строка. Мне кажется или это далеко от задачи описанной в первом посте?
Не говоря уже о том что всё зависит от работы(и, кстати, наличия) конвертера текстовых файлов в конкретной версии офиса. Не говоря уже о том, что ОпенОфис при открытии такого "экселевского" файла честно откроет окно импорта из текстового файла(впрочем разделители он распознал вполне корректно).
Я считаю что подобный подход в корне не верен - расширение файла должно соответствовать внутреннему формату. Одну из причин я уже писал. Предположим Ваша организация передавала смежникам экселевские отчёты, которые они обрабатывали автоматически. Теперь Вы решили процесс автоматизировать и скриптом генерируете "экселевские"(а на самом деле текстовые) отчёты. Так вот, скрипт ориентированный на работу с настоящим форматом XLS псевдо экселевские файлы не поймёт(я с этим уже сталкивался). Для начала, пройдёт некоторое время прежде чем обнаружится что данные не получаются. Потом одной из сторон прийдётся переписывать свои скрипты. Кто станет крайнем в потере оперативности из-за смены формата данных?
Если уж нет желания использовать Excell.Application(или его нет - например на сервере не установлен офис), то можно установить MSDE, и все данные сливать туда. А уже с MSDE получить экселевские отчёты элементарно - DTS Вам в помощь
18 Ответ от Slav 2011-04-29 13:34:44
.
Slav, если в первом моём примере скрипта(где вывод идёт в текстовый файл) поменять расширение на xls, то на выходе будет текстовый файл(" файл1 "):
.
Если открыть экселем текстовый файл " файл1 ", то результат будет отнюдь не тот что ожидался - с данными будет только первая колонка, в каждой ячейки которой помещена строка. Мне кажется или это далеко от задачи описанной в первом посте?
.
предлагаю еще раз внимательно посмотреть на постановку задачи.
В ней прямо сказано - каждое значение находится в одной строке.
Это Вы предлагаете преобразовать входные данные в формат csv - как раз для решения проблемы "одной строки".
А затем применить трюк с заменой на расширение xls.
Не нужно этого делать - так и читайте с расширением csv.
Я не имею ничего против Excell.Application.
Но давайте оценим разные решения с точки зрения лаконичности - ведь все гениальное просто.
Имея txt-файл с конкретной структурой с одной стороны предлагается сделать еще как минимум 2 файла: скрипт преобразования в csv и на выходе сам csv.
Второе решение - скрипт с Excell.Application, который читает данные - пишет в xls-формате.
А третье решение - назовем его "трюковое" - требует всего-то сменить расширение на xls.
И еще - давайте уж рассмотрим его до конца - небольшую макру Auto_Open в самом Excel, которая переставит значения из исходного формата в строку при открытии файла.
И которая может быть создана пользователем начального уровня в самом Excel путем "записать макро".
Я не хочу давать оценку - какое решение лучше.
Пусть каждый выберет то, которое лично ему больше нравится.
Или больше подходит в данной конкретной ситуации.
Полюбому - лучше всегда знать как можно больше вариантов, в том числе и "трюковых".
Как Вы считаете?
Удачи!
19 Ответ от BeS Yara 2011-04-29 14:01:06
- BeS Yara
- Разработчик
- Неактивен
предлагаю еще раз внимательно посмотреть на постановку задачи.
В ней прямо сказано - каждое значение находится в одной строке.
Прочитал.
Необходимо преобразовать его в формат xls.
<. >
Причем необходимо, сделать так, чтобы строки в каждом блоке стали столбцами, возможно ли такое?
Так что данные нужно всё-таки транспонировать, причём разделителем результирующих строк служит пустая строка. И "заказанный" формат - XLS, а не текстовый с разделителем
Сформировать CSV предложил Dmitrii, я лишь предложил реализацию(благо код там копеешный, а у меня было свободное время). Потом, поняв уровень спрашивающего уже доделал вариант с экселем(Тут конечно код не идиален, делался полунаучным методом. Но ведь выполняет поставленную задачу )
Но давайте оценим разные решения с точки зрения лаконичности - ведь все гениальное просто.
Лаконичнее и правильнее было бы обойтись без промежуточных файлов, а формировать отчёт сразу. Если очёты требуется дополнять(возникло такое подозрение по высказываниям Pitkin-а), то я бы всё-таки перешел к хранению в БД. Там гораздо проще манипулировать данными, да и встроенные механизмы получения отчётов в разных форматах тоже присутствуют(про экспресс не уверен, но в MSDE - 100%).
Полюбому - лучше всегда знать как можно больше вариантов, в том числе и "трюковых".
Как Вы считаете?
В целом согласен(про пользу разнообразных решений). Что касается "трюков", то тут я своё отношение написал. Их полезно знать, их иногда можно использовать. Но нужно также знать из-за чего эти трюки работают - чтобы понять почему вдруг трюк перестал работать на другом компьютере Думаю что многие тут, на форуме, представляют уровень типового пользователя. Так что чем меньше будет в конечном результате зависеть от опыта работы "оператора"(того к кому попадёт трюковый отчёт), тем надёжнее решение.
Читайте также: