Страницы: 1
RSS
Автоматически обновляемый csv файл, В файл csv вставляю данные из другого excel файла, после сохранения все формулы пропадают
 
Здравствуйте знатоки!
Надеюсь мой вопрос имеет какое ни будь решение.
Есть excel файл в нем много данных и много страниц
Есть другой файл (csv) в него я вставляю денные с одной из страниц первого excel файла путем добавление формулы в я чейку A1 (=A1) и т.д. во все ячейки.
Далее я сохраняю csv файл и все формулы заменяются на текст.
В последствии, csv файл я загружаю на сайт, что бы данные встали на сайт.
Вопрос. Как сделать что бы данные в csv файле обновлялись автоматически если изменяются данные в excel файле.
Заранее спасибо!
 
bmw323f, теоретически можно формировать .csv при каждом сохранении файла \ при изменении на листе.
Приложите пример файла, где вносятся правки и требуемого .csv-файла
In GoTo we trust
 
bmw323f,
Цитата
bmw323f написал:
Как сделать что бы данные в csv файле обновлялись автоматически если изменяются данные в excel файле.
В эксель файле написать макрос, который будет это делать.
Если все нужно сделать за вас, то в вам в раздел "Работа"
 
Правильно я понимаю, технически можно написать такой макрос, который будет копировать данные на другой файл и сохранять его автоматически?
 
bmw323f, да, верно. Можно также привязать копирование и сохранение файла (csv) к изменению какого-то определенного диапазона \ сохранению основной книги \ пересчету формул и т.д.
In GoTo we trust
 
Макрос нужно писать в писать в исходном файле, верно?
 
bmw323f, вот так в самом простом случае, по кнопке:
Код
Sub ButtonCSVExport()
    Dim pt As PivotTable, exportWb As Workbook
    ' Текущий лист
    Set curSh = ActiveSheet
    ' Создать новую книгу
    Set exportWb = Workbooks.Add
    ' Скопировать диапазон значений сводной таблицы с листа в новый файл
    curSh.PivotTables(1).RowRange.Offset(1, 0).Resize(RowSize:=curSh.PivotTables(1).RowRange.Rows.Count - 1).Copy _
        Destination:=exportWb.Sheets(1).Cells(1)
    
    ' Сохранить новую книгу как CSV, разделитель - точки с запятыми
    
    ' Адрес сохранения - папка в которой сохранен файл-источник
    exportWb.SaveAs Filename:=ThisWorkbook.Path & "\export.csv", FileFormat:=xlCSV, Local:=True
        
    ' Альтернативно - прописываем путь сохранения файла
    'fileSavePath = "C:/export.csv"
    'exportWb.SaveAs Filename:=fileSavePath, FileFormat:=xlCSV, Local:=True
    
    ' Закрыть новую книгу без сохранения
    exportWb.Close SaveChanges:=False
End Sub


Можно привязать макрос, например, к обновлению сводной таблицы. Можно не использовать сводную таблицу, а на первом листе сразу отфильтровать данные по необходимости изменения, и т.д. и т.п.
Изменено: tolstak - 23.05.2018 13:50:36
In GoTo we trust
 
Получается он каждый раз будет создавать новый файл CSV? Или обновлять старый?
Хорошая идея сделать запуск макроса как только обновляется сводная. Только у меня стоит макрос на Лист1 который автоматически обновляет сводную при добавлении новых значений в таблице. Не получится так, что из-за этого макроса на лист1, макрос на лист2 будет постоянно работать?
 
bmw323f, сейчас сделано так, что файл перезаписывается, но можно поменять. Запись файла осуществляется по нажатию кнопки.
Если у Вас сводная таблица используется только для выгрузки в CSV, я бы рекомендовал Вам сделать иначе - на лист с данными вывести кнопку, которая по клику сохранит все строчки с листа, в которых отмечено "Нужно обновить".
Еще вариант - повесить макрос на сохранение файла. То есть, пока Вы работаете с документом - ничего не происходит, а когда сохраняете - автоматически генерируется csv
In GoTo we trust
 
дело в том что в оригинальном файле в таблице есть еще столбцы, которые не входят сводную, или тоже можно выбрать только нужные столбцы?
 
bmw323f, естественно можно)
Код
Sub primer()
    Dim curSh As Worksheet, LO As ListObject, copyRn As Range, FinalCopyRn As Range
    ' Текущий лист
    Set curSh = ActiveSheet
    ' Умная таблица на листе
    Set LO = curSh.ListObjects(1)
    ' Для каждой строки диапазона значений умной таблицы
    For Each rrow In LO.DataBodyRange.Rows
        ' Если в первом столбце единица, то...
        If rrow.Cells(1).Value = 1 Then
            ' Сохранить строчку в диапазон copyRn
            If copyRn Is Nothing Then
                Set copyRn = rrow
            Else
                Set copyRn = Union(copyRn, rrow)
            End If
        End If
    Next rrow
    
    ' Если есть хотя бы одна строчка для экспорта, то...
    If Not copyRn Is Nothing Then
        ' Создать новую книгу
        Set exportWb = Workbooks.Add
        ' Данные для экспорта - пересечение Столбцов C и E со строками, где единицы в первой колонке
        Set FinalCopyRn = Union(Intersect(curSh.Range("C:C"), copyRn), Intersect(curSh.Range("E:E"), copyRn))
        ' Копируем нужные данные на новую книгу
        FinalCopyRn.Copy Destination:=exportWb.Sheets(1).Cells(1)
        
        ' Сохраняем книгу как CSV
        exportWb.SaveAs Filename:=ThisWorkbook.Path & "\export.csv", FileFormat:=xlCSV, Local:=True
        ' Альтернативно - прописываем путь сохранения файла
        'fileSavePath = "C:/export.csv"
        'exportWb.SaveAs Filename:=fileSavePath, FileFormat:=xlCSV, Local:=True
        
        ' Закрыть новую книгу без сохранения
        exportWb.Close SaveChanges:=False
    End If
End Sub
Изменено: tolstak - 23.05.2018 22:13:50
In GoTo we trust
 
На всякий случай (вдруг кто не знает) - csv это обычный текстовый файл, в нём не живут никакие формулы/форматы/макросы, и никак этого не добиться. Можно только создавать его заново, или изменять какие-то части. Как и любой текст в блокноте.
 
tolstak, спасибо вам огромное, это лучшее решение на которое я мог рассчитывать!
 
Код
FinalCopyRn.Copy Destination:=copyWb.Sheets(1).Cells(1)
- откуда тут copyWb? Пришлось файл качнуть... там правильно!
 
Hugo, упс, замаялся, спасибо что заметили :-)
In GoTo we trust
Страницы: 1
Наверх