Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Экспортировать данные из Эксель в markdown-файлы
 
doober, спасибо за ответ! Теперь всё, вроде бы, читается как надо!
Изменено: MaksExcel - 28.01.2022 19:53:42
Экспортировать данные из Эксель в markdown-файлы
 
Спасибо, за ответы. Я попытался обобщить приведенный ранее макрос и предложенную функцию, но, очевидно, я неверно её применяю, т.к. получаю в файле False, вместо текста в UTF-8.
Подскажите, пожалуйста, как всё-таки добиться вписывания в конечный файл текста в нужной кодировке?
(может пример использования SaveTextToFile(ByVal txt$, ByVal filename$, Optional ByVal encoding$ = windows-1251) )
Экспортировать данные из Эксель в markdown-файлы
 
Спасибо, за совет! Надеюсь, это решит мой вопрос. Подскажите, пожалуйста, как принудительно эту кодировку включить через макрос (если это возможно так сделать)?
Экспортировать данные из Эксель в markdown-файлы
 
Здравствуйте, уважаемые эксперты!
Мне необходимо из двух столбцов в экселевском файле (офис 2016 проф плюс) сформировать массив Markdown файлов (.md), чтоб их мог прочесть Обсидиан (прога для ведения базы заметок).
Макрос нашел в теме на форуме - немного скорректировал и он почти подошёл под мою задачу. Затруднение у меня вызвало то, что содержимое файлов в формате ".md" считывается Обсидианом некорректно - в неопределенные символы.
Суть:
1. Если переношу созданные макросом фалы в хранилище Обсидиан - он видит файлы, но содержимое воспроизводит нечитаемо. Символы выглядят типа ��� �� �� 31 ������� 2021 �.
2. Если я меняю путь к хранилищу заметок на папку, в которой хранятся созданные макросом файлы ("...\downloads"), то Обсидиан их не видит вовсе.
3. Если открываю созданные макросом файлы и вручную переношу их содержимое в существующие Markdown файлы, то Обсидиан их считывает адекватно.

Подскажите, пожалуйста, как это поправить - сделать так чтобы созданные макросом файлы считывались верно?

P.S. Я пока размышляю о том, чтобы положить в папку пустой, но рабочий маркдаун-файл (образец), а затем для каждой будущей заметки скопировать его, переименовать (именем копируемой заметки) и скопировать в него содержимое созданных макросом файлов....... Но это выглядит громоздко, сомнительно и, полагаю, вы можете посоветовать более изящное решение.
Изменено: MaksExcel - 20.01.2022 14:57:24 (добавил файл с макросом)
VBA: создать файлы txt с названиями по списку и с надписью в первой строке
 
Здравствуйте, уважаемые эксперты!
У меня вопрос, сопоставимый (наверное) со стартовым: необходимо из двух столбцов в экселевском файле (офис 2016 проф плюс) сформировать массив Markdown файлов (.md), чтоб их мог прочесть Обсидиан (прога для ведения базы заметок).
Спасибо за любезно предоставленный код - немного скорректировал и он почти подошёл под мою задачу. Затруднение у меня вызвало то, что содержимое файлов в формате ".md" считывается Обсидианом некорректно - в неопределенные символы.
Суть:
1. Если переношу созданные макросом фалы в хранилище Обсидиан - он видит файлы, но содержимое воспроизводит нечитаемо (скриншот прилагаю). Символы выглядят типа ��� �� �� 31 ������� 2021 �.
2. Если я меняю путь к хранилищу на папку в которой хранятся созданные макросом файлы ("...\downloads"), то Обсидиан их не видит вовсе.
3. Если открываю созданные макросом файлы и вручную переношу их содержимое в существующие Markdown файлы, то Обсидиан их считывает адекватно.

Мою попытку скорректировать макрос и скриншот заметки с нечитаемыми символами прилагаю.

Подскажите, пожалуйста, как это поправить - сделать так чтобы созданные макросом файлы считывались верно?

P.S. Я пока размышляю о том, чтобы положить в папку пустой, но рабочий маркдаун-файл (образец), а затем для каждой будущей заметки скопировать его, переименовать (именем копируемой заметки) и скопировать в него содержимое созданных макросом файлов....... Но это выглядит громоздко, сомнительно и, полагаю, вы можете посоветовать более изящное решение.
Изменено: MaksExcel - 20.01.2022 13:55:49
Ограниченный импорт данных из CSV в XLS, Необходимо, чтобы макрос импортировал в эксель только несколько последних строк csv-файла
 
Максим, всё заработало!
Спасибо большое за помощь! От души желаю Вам успехов во всех Ваших делах!
Ограниченный импорт данных из CSV в XLS, Необходимо, чтобы макрос импортировал в эксель только несколько последних строк csv-файла
 
Максим, доброй ночи!
Отдельный макрос отчего то выдает упомянутый ранее "Run-Time Error 9..." Я менял его переменные как мог, попробовал Application.Transpose(a) добавить, но Error 9 остаётся...
Но главное что обобщенный макрос работает!!! СПАСИБО БОЛЬШОЕ, Максим!
Ограниченный импорт данных из CSV в XLS, Необходимо, чтобы макрос импортировал в эксель только несколько последних строк csv-файла
 
Максим, спасибо за подсказку - моя невнимательность. Поправил - всё заработало. С последней строкой получится что-нибудь сделать?
Я сам пытался на основе Вашего макроса сделать - занятие увлекательное, но пока безрезультатное. Прилагаю закомментированный код. Если не трудно поправьте где я ошибаюсь.

Код
Sub importOptLast_3()                           ' объявили макрос
    Dim arr, a, b, i&, x&, n&                   ' ввели переменные
    arr = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\BCS_Work\QUIK\QPILE\История параметров.CSV", 1).ReadAll, vbCrLf) ' присвоили переменной "arr" значение из файла, который для этого открыли и прочли записанную в нем инфу (массив)
    n = 1                                       ' переменной "n" присвоено начальное значение
    ReDim a(1 To 11, 1 To 1)                    ' не понял, но может здесь формируется массив определённого вида (количество элементов в строке и т.д.)
    If i = UBound(arr) Then                     ' если значение "i" равно верхней границе массива "arr" (последнее значение), то...
            'ReDim Preserve a(1 To 11, 1 To n)   ' каким-то образом отформатировать массив?
            b = Split(arr(i), ";")              ' разбить элемент "i" массива "arr" по разделителю ";"
            'For x = 0 To UBound(b): a(x + 1, n) = b(x): Next ' для введённых ранее переменных "Х" со значениями от 0 до верхней границы массива... дальше не понял
            n = n + 1                           ' увеличить переменную "n" на 1 (сделать ещё шаг)
        End If                                  ' закончить оператор "if"
        [AI33].Resize(UBound(a, 2), 11) = Application.Transpose(a) ' записываем в AI33... больше не понял((
        MsgBox ("importOptLast_3 прочтён!")     ' сделал для того чтоб видеть что код вообще считывается
End Sub                                         ' закрыли макрос
Ограниченный импорт данных из CSV в XLS, Необходимо, чтобы макрос импортировал в эксель только несколько последних строк csv-файла
 
Максим, 44-ая строка:
Код
For xA = 0 To UBound(bA): aA(xA + 1, nA) = bA(xA): Next
И выделяет желтым маркером
Код
: Next
Изменено: MaksExcel - 23.09.2014 21:56:06
Ограниченный импорт данных из CSV в XLS, Необходимо, чтобы макрос импортировал в эксель только несколько последних строк csv-файла
 
Максим, целые часы ("00" минут) макрос возвращает, а возврат последней строки не получится ли сделать? Если это сложно вписать в текущий макрос, то можно и просто отдельный, а я уже совмещу с существующей "коллекцией".

Я помню, Hugo писал, что там не всё так просто. Если там сложность, то пусть так останется - я формулами добрал необходимое значение. Правда получилось ооочень коряво, но скорость вроде сохранилась приемлемая, хоть и есть некоторый временнОй лаг.

P.S. При совмещении всех макросов в один получаю ошибку "Run time error 9. Subscrirt out of range". Почитал, что за косяк - пишут, что-то типа "Элемент за пределами диапазона". Не понимаю почему так ведь поодиночке макросы работают корректно. Подскажите, пожалуйста, что я не учёл. Пока я это избегаю этой ошибки тем, что запускаю макросы последовательно помощью ОнТайма - но, наверняка, можно и более интеллигентно сработать.

Вот совмещенный макрос (некоторые переменные дублировались, поэтому переименованы так чтоб уж наверняка не повторились):

Код
Sub MyMacroEXCHANGE2HugoMaxWay()
Dim sh As Worksheet
' Application.OnTime Now() + TimeSerial(0, 5, 0), "MyMacroEXCHANGE2HugoMaxWay" 

 ' импорт всей истории цены
 Set ts = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\Users\1_H1.CSV", 1)    'Подставьте свой путь к txt-файлу
    arr = Split(ts.ReadAll, vbCrLf)    'массив строк текста целиком
    ts.Close

    ReDim a(1 To UBound(arr) + 1, 1 To 7)

    For i = 0 To UBound(arr)
        b = Split(arr(i), ";")
        For x = 0 To UBound(b)
            a(i + 1, x + 1) = b(x)
        Next
    Next
[b1].Resize(UBound(a), UBound(a, 2)) = a

 ' импорт всей истории счёта
 Set ts = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\История параметров.CSV", 1)    'Подставьте свой путь к txt-файлу
    arr = Split(ts.ReadAll, vbCrLf)    'массив строк текста целиком
    ts.Close

    ReDim a(1 To UBound(arr) + 1, 1 To 11)

    For i = 0 To UBound(arr)
        b = Split(arr(i), ";")
        For x = 0 To UBound(b)
            a(i + 1, x + 1) = b(x)
        Next
    Next
[V33].Resize(UBound(a), UBound(a, 2)) = a

' импорт текущего состояния счёта
Dim arrA, aA, bA, iA&, xA&, nA&
    arrA = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\История параметров.CSV", 1).ReadAll, vbCrLf)
    n = 1
    ReDim aA(1 To 11, 1 To 1)
    For iA = UBound(arrA) To 0 Step -1
       If arrA(iA) <> "" And Mid(arrA(iA), 12, 2) = "00" Then
            ReDim Preserve aA(1 To 11, 1 To n)
            bA = Split(arrA(iA), ";")
            For xA = 0 To UBound(bA): aA(xA + 1, nA) = bA(xA): Next
            nA = nA + 1
        End If
    Next
    [j33].Resize(UBound(aA, 2), 11) = Application.Transpose(aA)

' импорт последних данных о цене
Set ts = CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\Users\1_H1_LAST.CSV", 1)    'Подставьте свой путь к txt-файлу 
    arr = Split(ts.ReadAll, vbCrLf)    'массив строк текста целиком 
    ts.Close   ReDim a(1 To UBound(arr) + 1, 1 To 7) 
  For i = 0 To UBound(arr)
        b = Split(arr(i), ";")
        For x = 0 To UBound(b)
            a(i + 1, x + 1) = b(x)
        Next
    Next
[x3].Resize(UBound(a), UBound(a, 2)) = a  

 'экспорт в сторонний файл  
Application.ScreenUpdating = 0
    Application.DisplayAlerts = 0
Dim PUT_FILE_out, lst As Variant
lst = "К экспорту"
PUT_FILE_out = Application.ActiveWorkbook.Path + "\" + lst + ".tri"
   
    Sheets(lst).Copy
    'ActiveWorkbook.SaveAs Filename:=PUT_FILE_out, FileFormat:=xlUnicodeText
    ActiveWorkbook.SaveAs Filename:=PUT_FILE_out, FileFormat:=xlText
    ActiveWindow.Close

    Application.ScreenUpdating = 1
    Application.DisplayAlerts = 1
End Sub
Ограниченный импорт данных из CSV в XLS, Необходимо, чтобы макрос импортировал в эксель только несколько последних строк csv-файла
 
Доброго времени суток, уважаемые участники! Спасибо Вам большое за участие и помощь! Максим, импорт «летает» и выполняет работу на 5+! Спасибо Вам лично - массив получился аккуратным и, что особо приятно - без пустых строк!))
Вечером применю его в "боевых" условиях, но уверен - всё будет ок!
Ограниченный импорт данных из CSV в XLS, Необходимо, чтобы макрос импортировал в эксель только несколько последних строк csv-файла
 
Цитата
JeyCi пишет: никогда не понимала, зачем котировки грузить в excel чтобы что-то считать, когда во всех торговых платформахуже давно всё посчитано, что надо...
Здравствуйте, JeyCi ! Ну, всё да не всё... Можно, конечно, дописывать свои особые пожелания, но у Квика свой язык, у Транзака, как мне известно, - свой, и т.д.. С Вэлс-Лабом поковыряюсь ещё, но позже. Кроме того, отзывы об этих языках позитивом на пышут)) Ну а главное - пока я научусь, писать что либо в платформах или отдельным приложением всё же логично затестить идею имеющимися средствами - для меня это Эксель. С формулами я более-менее разбираюсь, а вот за макросами приходится обращаться за помощью. Так что, как говорится, "не ругайте пианиста - он играет как умеет"  ;)  ))

А за сайт спасибо от души - внимательно поизучаю на выходных!

К сожалению, все кто отозвался на запрос, в настоящий момент пропали со связи... Я всё же надеюсь, что озвученная задача сложна для меня, но не для вас, участники форума. Может кто-нибудь еще отзовётся?
Ограниченный импорт данных из CSV в XLS, Необходимо, чтобы макрос импортировал в эксель только несколько последних строк csv-файла
 
Здравствуйте, Hugo!
Рад Вас снова видеть в этой теме! Признаться, надеялся, что Вы появитесь в этой дискуссии, т.к. мы закончили в прошлый раз как раз на том, что некоторые вычисления можно проводить "на лету", но тогда мне хватало того, что есть и я не хотел Вас грузить просьбами о функционале, в котором тогда не нуждался. Теперь потребность возникла.
Я в очень общих чертах понял то, что Вы написали, но полагаю, что этот вопрос решаем через корректировку Вашего макроса. Если Вы сможете его соответственным образом подкорректировать, то буду признателен!

Цитата
Максим Зеленский пишет:
- второй элемент нужной строки всегда будет иметь 3 и 4 цифры - 00?
- время - всегда 6 цифр, или может быть 5?
- нужно ли каждый раз выгружать весь массив///?
Здравствуйте, Максим!
1. Возможно, я не вполне точно понял вопрос... Второй элемент - это время прописанное сплошняком без символа ":" между часами, минутами и секундами. Обновление и возвращение данных происходит каждые 60 секунд, так что каждый час среди элементов обязательно появится код времени, в котором 3-ья и 4-ая позиции будут 0 и 0. Формат выгружаемых данных стандартен:
20140912 (дата);105926 (время в формате ЧЧ:ММ:СС);SRU4 (код инструмента);7633 (Цена открытия);7633 (высочайшая цена с начала часа);7524 (самая низкая цена с начала часа);7591 (текущая цена);126376 (объём);130774.96 (доп параметр);НЕТ (наличие текущей сделки);0 (количество актива в текущей сделке).
2. Время всегда 6 цифр, обозначения часа из одной цифры будет обозначено как 09ММСС, но по факту минимальное число, которое может возникать это 100000.
3. На Ваше усмотрение. Мне нужны только строки, которые отражают показатели за последние 14 часовых периодов. Рискну предположить что догрузка последнего значения будет более скорострельной, чем обновление массива с прежними данными, но, повторюсь, когда я напрямую копировал искомые значения в необходимые ячейки, то расчет становился достаточно оперативным даже при копировании всего массива. Думаю, тот факт, что искомые значения вписал макрос, а не пользователь вручную не будет иметь значения.
Ограниченный импорт данных из CSV в XLS, Необходимо, чтобы макрос импортировал в эксель только несколько последних строк csv-файла
 
Продолжение.
Снова здравствуйте, уважаемые участники форума.
Вопрос мой касается существа нынешнего обсуждения, посему продолжаю (если, необходимо создать новое обсуждение – укажите, пожалуйста, мне на это, переделаю).
Суть вопроса вот в чем:
Эксель импортирует из цсв (*.csv) файла некоторые данные в определённую ячейку (J33). Тут всё вроде норм, но объём импортируемой информации многократно превышает необходимый. Так вышло от того что разработчик предыдущей утилиты (которая ведает появлением инфы в цсв-файле) прекратил разработку всех проектов (не только моих) по своему желанию, так что – работаю с тем что есть.
Теперь суть – из массива переданной информации мне нужны только те строки, которые относятся к началу часа (ЧЧ:00:СС) плюс текущее состояние (последняя строка). Сейчас с помощью формул в Экселе я вытаскиваю нужную инфу и анализирую только её, но из-за этого время расчётов составляет около 14 сек, а это много даже для этого проекта. Если напрямую поставить только необходимые данные, то расчет, я так полагаю, должен пройти в течении 1 секунды, что очень меня устроит. При подстановке нужной инфы копированием обработка происходила мгновенно.
Перечитал написанное – возможно, выглядит сумбурно, поэтому приведу пример:
Скрытый текст
Возможно, есть альтернативные пути ускорения расчётов – буду благодарен, если подскажете.
Сам экселевский файл отчего-то не загружается ("При сохранении файла произошла ошибка." ) Попробую отдельно выложить.
P.S. приложить эксель не выходит - вес около 4,71 МБ. Могу на почту кинуть или еще как.
Изменено: MaksExcel - 15.09.2014 10:54:41
Ограниченный импорт данных из CSV в XLS, Необходимо, чтобы макрос импортировал в эксель только несколько последних строк csv-файла
 
Спасибо, Hugo!
Ограниченный импорт данных из CSV в XLS, Необходимо, чтобы макрос импортировал в эксель только несколько последних строк csv-файла
 
Hugo, про стандартный импорт я ничего даже не слышал))
Если не трудно - закомментируйте код - я хоть потихоньку буду вникать в макросоведение.
По поводу расчета "на лету" это интересный вариант. У него, очевидно, есть преимущества по скорости, но в данном проекте скорость расчётов даже в 3-5 секунд приемлема.

Но есть у меня один замысел, в котором скорость будет весьма таки важна... правда он пока в самом зачаточном состоянии. Там мне будет интересно Ваше содействие.
Ограниченный импорт данных из CSV в XLS, Необходимо, чтобы макрос импортировал в эксель только несколько последних строк csv-файла
 
Здравствуйте, Hugo! Ваш вариант действительно сделал импорт молниеносным! Благодарю от души! На данный момент не вижу никаких вопросов - сделали даже лучше чем я ожидал!)) Спасибо!
Ограниченный импорт данных из CSV в XLS, Необходимо, чтобы макрос импортировал в эксель только несколько последних строк csv-файла
 
Здравствуйте, участники форума!
Я далеко не знаток экселя, поэтому мне требуется ваша помощь. Суть описана мною в одной из прежних веток и она в следующем:
1. есть программа, которая экспортирует данные в csv файл (файл пересоздается 1 раз в секунду с тем же названием и в том же месте)
2. эксель должен его считать (импортировать),
3. рассчитать и скомпоновать оценку полученным данным (внутренние расчёты экселя с меня, пока я их дорабатываю) и
4. экспортировать его в tri-файл (суть та же, что и у тхт-файла, только расширение другое), чтоб начальная программа могла его принять и реализовать.
Все это должно происходить без моего участия.
Я сегодня сам поискал на форуме, нашел макрос на импорт, макрос на экспорт (спасибо, ещё раз Моте), макрос на цикл (спасибо Igor67), скомпоновал это всё (сам удивлён, что вышло успешно), но... не всё так здорово.
Отсюда вопросы:
1. Я так и не разобрался как сделать так чтоб данные экспортировались не в активную ячейку, как сейчас, а в указанную (например, файл "импорт-экспорт", лист "Расчёты", начальная ячейка B2). Временами я оставляю выделенной не ту ячейку и это влечёт перезапись поверх формул и прочие сложности.
2. Главное. В файле-экспортере около 4000 строк (может становиться и больше), соответственно процесс импорта в эксель занимает слишком много времени. Выход вижу в том, чтобы ограничить экспорт последними, например, 100 строками. Полагаю макрос сработает достаточно оперативно, а информативность в 100 строк меня устроить. Если есть другой выход - буду рад узнать. Поиск юзал: про импорт есть, про ограничение его последней сотней строк - не нашел.
Изменено: MaksExcel - 04.05.2014 12:17:20
Экспорт в текстовый файл
 
Здравствуйте, уважаемые участники!
Мотя, благодарю Вас за отличное решение! Оно работает абсолютно верно! Прога, считывающая тхт файл восприняла его как родного! Не нахожу раздел типа "Репутация", иначе плюсанул бы Вам от души. Спасибо большое!

P.S. Вопрос администратору: для того чтоб попросить зациклить макрос или запускать по расписанию (я пока не решил) - мне лучше создать новую тему или продолжить можно здесь?
Экспорт в текстовый файл
 
Мотя, спасибо!! Кавычки ушли, запятых в конце строк нет, работает! Остались 2 момента: злополучные кавычки появляются если экспортируется дробное число; и между строками в тхт добавляется пустая строка.
Но я, надеюсь, это не критично.
Завтра протестирую - отпишусь.
Экспорт в текстовый файл
 
Мотя, здравствуйте! Мне неловко сказать, но, возможно, я не понял что Вы имели в виду... Вставить содержимое ячеек А5:А7 как текст в другие ячейки и экспортировать их? Если это, то увы, результат тот же.
Пожалуй мне всё же стоит уточнить смысл сего действия:
1. есть программа, которая передает значения в эксель,
2. эксель проводит манипуляции с полученными значениями и выдает результат в виде текста и значений (через формулу "=сцепить(...)" ;)  и
3. экспортирует в тхт,
4. которого уже читает первоначальная программа-экспортер.
Я стремлюсь максимально автоматизировать этот процесс, чтоб не отвлекаться на него постоянно. Соответственно ручное копирование сведет на нет весь смысл. Да и лишние знаки, к сожалению, остаются...

P.S. Да и вот еще. Офис у меня 2010. Не знаю имеет ли это значение, но мало ли...
Изменено: MaksExcel - 22.04.2014 00:28:16
Экспорт в текстовый файл
 
Вот они файлы... Ничего не выдумываю - вот так и работает. Хотел скриншот прилепить, но не вышло,
Экспорт в текстовый файл
 
Ваш, anvg. Который "код в лоб". Всё работает, но вот если чуть подправить можно было - было б идеально!..
Экспорт в текстовый файл
 
Здравствуйте все!
Я сейчас как раз интересуюсь точно этой же темой. Скопировал макрос, но в тхт-шном файле (при импорте из экселя текстовой информации) появляются кавычки и запятые после каждой импортированной ячейки. Подскажите, пожалуйста, как сделать так чтоб не было кавычек?
Изменено: MaksExcel - 20.04.2014 02:04:47
Страницы: 1
Наверх