
У меня есть файл Excel с разными полями в каждом столбце:
Поле 1__ | Поле 2__ | и т.д.
F1 Элемент 1 | F2 Элемент 1 | и т.д.
F1 Элемент 2 | F2 Элемент 2 | и т.д.
В каждом поле содержится разное количество элементов.
Я хочу создать документ Word 2010, который перечислит все элементы в каждом поле в одном документе, а не разбивать на несколько документов для каждой записи. Поэтому окончательный документ Word выглядит так:
Поле 1
__ F1 Элемент 1
__ F1 Элемент 2
Поле 2
__ F2 Элемент 1
__ F2 Элемент 2
__ F2 Элемент 3
Метки "Поле 1" и "Поле 2" не нуждаются в поле слияния почты, но все элементы под полем должны быть объединены для отображения в одном документе. Возможно ли это сделать, есть идеи или ресурсы, как этого добиться?
решение1
Я бы использовал для этого инструмент запросов и отчетов, например 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.
решение2
Тыможетиметь возможность использовать поле DATABASE Word для этого. Диалоговое окно для вставки не находится на ленте, поэтому вам придется пойти и найти его в параметрах Word и поместить его в 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 снова. Если все хорошо, повторите для оставшихся полей.
Несколько заметок:
WHERE ((cf2.[field2] IS NOT NULL )) предназначен для того, чтобы иметь дело с тем фактом, что ваши столбцы имеют разное количество ячеек. Но вам может понадобиться немного больше, и этот метод устранитвсепустые ячейки, а не просто пустые ячейки внизу столбца.
\h просто добавляет заголовок столбца.
"cf1", "cf2" — это псевдонимы SQL TABLE. Вы можете придумать их по мере необходимости. Они не должны быть нужны, но они есть, потому что без них Word имеет тенденцию немного путаться, как вы можете обнаружить, если попытаетесь вставить эти поля с помощью диалогового окна поля DATABASE (которое не вставляет эти псевдонимы).