Хранение шаблонов Excel в моей базе данных Access

#windows #ms-access #vba #ms-access-2013

#Windows #ms-access #vba #ms-access-2013

Вопрос:

Что я хочу:

Я работаю с базой данных MS Access для подготовки отчета для совета по аккредитации профессионального инженерного университета Онтарио. У PEO есть свои шаблоны в MS Excel, и я ДОЛЖЕН использовать их точный формат.

Я хочу вывести данные из базы данных Access на лист Excel (достаточно просто), но я хочу скопировать их форматирование при создании нового файла. (Я НЕ хочу сохранять пустой файл шаблона и копировать его каждый раз).

Итак, по сути, я хочу каким-то образом сохранить шаблон в коде. (Другие предложения приветствуются!)

Что я пробовал:

Некоторые из вас прочитают это и подумают, что я идиот. Но я пытался получить данные из Excel в буфер обмена MS с помощью кода API и сохранить DataObject как (я надеялся) какую-то строку.

Но я не смог сохранить форматирование или затенение ячеек из исходного шаблона MS Excel.

Есть предложения?…

Комментарии:

1. Какую версию Access вы используете?

Ответ №1:

Вы могли бы сохранить шаблоны Excel в базе данных, создав таблицу, содержащую Attachment поле

DesignView.png

создание записи и сохранение шаблона Excel в качестве вложения к этой записи

AttachmentsDialog.png

а затем с помощью кода VBA, подобного этому, сохраняйте новую копию документа Excel на диск всякий раз, когда она вам понадобится:

 Option Compare Database
Option Explicit

Public Sub SaveReportTemplateToFile()
    Dim cdb As DAO.Database, rowRst As DAO.Recordset, attachRst As DAO.Recordset2, attachField As DAO.Field2
    Set cdb = CurrentDb
    Set rowRst = cdb.OpenRecordset("SELECT TemplateFile FROM ReportTemplates WHERE ID=1")
    Set attachRst = rowRst.Fields("TemplateFile").Value
    Set attachField = attachRst.Fields("FileData")
    attachField.SaveToFile "C:UsersGordDesktop" amp; attachRst.Fields("FileName").Value
    Set attachField = Nothing
    attachRst.Close
    Set attachRst = Nothing
    rowRst.Close
    Set rowRst = Nothing
    Set cdb = Nothing
End Sub
  

Комментарии:

1. Это выглядит ФАНТАСТИЧЕСКИ! Итак, сохранение вложения в таблице означает, что в базе данных есть печатная копия? Значит, мне не нужно хранить файл .xls в базе данных Access?

2. @user3163380 Да, файл вложения сохраняется как объект в базе данных.

3. Спасибо, это отличный ответ на мою проблему! И спасибо за скриншоты, они были ЧРЕЗВЫЧАЙНО полезны

4. Горд, ты только что чертовски упростил мою жизнь! Спасибо

Ответ №2:

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

Насколько я знаю, более быстрого способа сделать это нет, но вот пример:http://www.rogersaccesslibrary.com/forum/topic350.html

Это будет непростая работа, но выполнимая, если шаблон хорошо настроен.

Комментарии:

1. Спасибо за ваш ответ, но, как я уже упоминал; Я хочу как-то избежать хранения шаблона Excel все вместе. Я хотел бы программно воспроизвести формат шаблонов, чтобы при перемещении базы данных Access мне не нужно было привязывать ее к внешнему файлу Excel. (Также это позволит избежать копирования песни и танца на новый лист пустого шаблона, а затем ссылки на другой лист)

2. Почему бы не сохранить шаблон в базе данных Access ? Полное копирование шаблона с помощью кода кажется большой работой без очевидной выгоды.

3. @TimWilliams Да, я не знал, что вы можете это сделать. Я принял это как лучший ответ (от Gord T). Спасибо за предложение!