-1

У меня есть файл Excel с различными полями в каждом столбце:

Поле 1__ | Поле 2__ | и т.п.
F1 Item 1 | F2 Item 1 | и т.п.
F1 Item 2 | F2 Item 2 | так далее

в каждом поле есть разное количество элементов.

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

Поле 1
__ F1 Item 1
__ F1 Item 2

Поле 2
__ F2, пункт 1
__ F2, пункт 2
__ F2, пункт 3

Ярлыки "Поле 1" и "Поле 2" не обязательно должны содержать поле для слияния, но все элементы в этом поле должны быть объединены с тем, чтобы отображать их в одном документе. Возможно ли это сделать, какие-либо идеи или ресурсы, как этого добиться?

2 ответа2

0

Я бы использовал для этого инструмент запросов и отчетов, такой как SQL Server Reporting Services. Вы можете подключить его к файлу Excel через ODBC, например,

http://weblogs.sqlteam.com/joew/archive/2008/08/22/60695.aspx

План отчета будет иметь две таблицы - одну для поля 1, затем следующую для поля 2. Вам нужно написать два (довольно простых) оператора SQL SELECT, чтобы получить данные в виде двух наборов данных.

Службы Reporting Services хорошо выполняют рендеринг в Word. Макет может быть гораздо более сложным, чем слияние Word, например, несколько областей данных, вложенные подотчеты, сложные диаграммы и т.д.

Вы можете запустить Reporting Services как приложение для настольного компьютера, встроить его в приложение Windows или Word или развернуть на сайте SharePoint или на простом портале Reporting Services.

0

Вы можете использовать поле Word DATABASE для этого. Диалоговое окно для его вставки отсутствует на ленте, поэтому вам нужно найти его в Word Options и поместить в QAT или что-то подобное. Но он страдает от одной или двух проблем, поэтому, вероятно, лучше вставить поле вручную - используйте ctrl-F9, чтобы вставить пару специальных кодов скобок поля, чтобы вы имели

{  }

(Вы не можете просто набрать эти скобки на клавиатуре).

Тогда все между {} является обычным текстом. Предположим, давайте предположим, что ваш документ Excel называется c:\xl\mywb.xlsx, данные находятся на листе с именем Sheet1 $, и у вас есть 3 поля с именами Field1, Field2 и Field3. Тогда ваше первое поле DATABASE может выглядеть так:

{ DATABASE  \d "C:\\xl\\mywb.xlsx" \s "SELECT cf1.[field1] FROM [Sheet1$] cf1 WHERE ((cf1.[field1] IS NOT NULL ))" \h }

Пожалуйста, обратите внимание на двойную обратную косую черту в имени пути. После того, как вы ввели это, выберите поле, нажмите F9, чтобы выполнить его, затем используйте Alt-F9, чтобы просмотреть результаты. Если они близки к тому, что вам нужно для вашего первого столбца, это может сработать для вас, а если нет, то, вероятно, самое время отказаться от этого подхода. Если сообщается об ошибке, это, вероятно, из-за опечатки.

После того, как один столбец заработал, скопируйте / вставьте поле базы данных и измените имена, чтобы

{ DATABASE  \d "C:\\xl\\mywb.xlsx" \s "SELECT cf1.[field1] FROM [Sheet1$] cf1 WHERE ((cf1.[field1] IS NOT NULL ))" \h }

{ DATABASE  \d "C:\\xl\\mywb.xlsx" \s "SELECT cf2.[field2] FROM [Sheet1$] cf2 WHERE ((cf2.[field2] IS NOT NULL ))" \h }

затем выберите F9, Alt-F9 снова. Если все хорошо, повторите для оставшихся полей.

Несколько заметок:

ГДЕ ((cf2. [Field2] NOT NULL)) нужно учитывать тот факт, что в ваших столбцах содержится разное количество ячеек. Но вам может понадобиться немного больше, и эта техника удалит все пустые ячейки, а не только пустые ячейки внизу столбца.

\h просто добавляет заголовок столбца.

"cf1", "cf2" - это "псевдонимы таблиц" SQL. Вы можете изобретать их по мере необходимости. Они не должны быть необходимы, но они есть, потому что без них Word, как правило, немного запутывается, как вы можете обнаружить, если попытаетесь вставить эти поля с помощью диалогового окна поля DATABASE (которое не вставляет эти псевдонимы).

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