4

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

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

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

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

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

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

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

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

2 ответа2

2

Нам нужно экспортировать некоторые данные в файл другого типа и сохранить активный документ «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 ()

0

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .