CSV_tools.xla

CSV_tools.xla

Как экспортировать лист, таблицу или выделенный фрагмент в другой формат файла?без изменения текущего активного документа?

Наша основная среда работы с данными находится в Excel, где широко используется форматирование и формулы для получения желаемых результатов. Затем результаты сохраняются для обеспечения .CSVвзаимодействия с другими программами.

Когда «Файл >>Сохранить как>> Сохранить как тип >> CSV" используется, создается файл .csvиактивный документ изменяется на saved_file.csv. Есть некоторые предупреждения о потере функциональности и форматирования в этом новом формате, но в остальном пользовательский интерфейс не изменился. Есть полужирный и курсивный шрифт, разные шрифты и размеры, фоновые заливки ячеек, определенные диапазоны таблиц и т. д. Все формулы в ячейках остаются нетронутыми.

Это катастрофа, которая вот-вот должна случиться. Пользователь возвращается к работе, убаюканный мыслью, что все нормально, вскоре забывает, что текущий формат не поддерживает никакой магии, и продолжает заниматься важными делами(tm). Наступает время обеда, они закрывают Excel, дважды нажимают «Да» на раздражающие диалоги, которые не читаются, потому что они видят их все время, и выходят за дверь. ...После обеда пользователь возвращается и понимает, что вся работа между первоначальным «Сохранить как» и «Выход» пропала.

"Файл >>Экспорт", к сожалению, является просто еще одним путем навигации к "Сохранить как", также изменяя активный документ на "some_file.csv".

Нам нужно экспортировать некоторые данные в другой тип файла и сохранить активный документ «our-real-data.xlsx».

Как это можно сделать? И добавить в меню или ленту для выполнения в один клик?

Как можно поделиться этим со всеми в организации? (не заставляя отдельных пользователей открывать редактор VBA и т. д.)

решение1

Нам нужно экспортировать некоторые данные в другой тип файла и сохранить активный документ «our-real-data.xlsx».

CSV_tools.xla

Я собрал быструю надстройку VBA, которая экспортируется как CSV, поскольку вы об этом упомянули. Я старался использовать как можно меньше кода, чтобы новым пользователям было легче его понять.

Что это

  • Надстройка спрашивает, где сохранить CSV. Папка по умолчанию — это папка, в которой сохраняется XLS
  • Надстройка автоматически определяет, следует ли использовать запятую или точку с запятой в качестве разделителя в зависимости от региональных настроек вашей системы.
  • Все значения текущего активного листа Excel экспортируются в новый CSV-файл, который назван так же, как и XLS-файл.
  • Существующий XLS не будет затронут каким-либо образом.

Монтаж

  1. ЗагрузитьДобавить ви сохраните его в разделеC:\Users\%USERNAME%\AppData\Roaming\Microsoft\AddIns
  2. Откройте Excel и активируйте его в
    • Excel 2003: Строка меню → Инструменты → Надстройки
    • Excel 2007: Параметры Excel → Надстройки → Перейти
    • Excel 2010-13: вкладка Файл → Параметры → Надстройки → Перейти
  3. Перезапустите Excel и посмотрите на строку меню.

    введите описание изображения здесь

VBA-код

Function ExportCSV()

    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    On Error Resume Next
    ChDrive (ActiveWorkbook.Path)
    ChDir (ActiveWorkbook.Path)
    strName = fso.GetBaseName(ActiveWorkbook.Name)
    On Error GoTo 0

    strFilename = Application.GetSaveAsFilename(strName, "CSV Files,*.csv", 1)
    delimiter = Application.International(xlListSeparator)
    If Not strFilename = False Then

        Open strFilename For Append As #1

        For Each rngRow In ActiveSheet.UsedRange.Rows
            arr2D = rngRow
            arr1D = Application.Index(arr2D, 1, 0)
            strRow = Join(arr1D, delimiter)
            Print #1, strRow
        Next

        Close #1
    End If

End Function

Автоматические обновления для разных пользователей

После того, как каждый пользователь включит надстройку в своем Excel (не может быть автоматизировано), вы можете скопировать новую .xlaверсию файла через сетевой ресурс, Robocopy или аналогичные инструменты. Но это должен быть отдельный вопрос, поскольку существует слишком много разных способов решения проблемы.


Для гиков VBA самая интересная часть —

arr2D = rngRow
arr1D = Application.Index(arr2D, 1, 0)
strRow = Join(arr1D, delimiter)

который преобразует диапазон (в нашем случае одну строку) в двумерный массив, затем в одномерный массив и, наконец, в одну строку с помощью функции Join()

решение2

Научите пользователя открывать копию этих данных.

При выборе документа Office вы можете щелкнуть правой кнопкой мыши по значку и нажать «Создать». Это создаст новый документ/лист/презентацию на основе оригинала. Пользователи могут экспортировать из него, просто выполнив команду «Сохранить как»

Надеюсь, у вас также есть хорошие резервные копии, если вы так переживаете...

Связанный контент