Как создать надстройку Excel для чтения пользовательских данных? - PullRequest
4 голосов
/ 22 февраля 2010

Мне было поручено создать надстройку для Excel 2007, которая считывает данные из пользовательского источника данных. У меня уже есть код, который читает данные. Он написан на C # и возвращает объекты. Это для банковской системы, и я не могу дать прямой доступ к данным. Идентификатор пользователя, пароль и сгенерированный аппаратный ключ должны быть предоставлены в C # DLL для получения актуальных данных.

Мой начальник хочет, чтобы данные обновлялись автоматически один раз в минуту или вручную, используя функцию обновления, предоставляемую Excel. Поэтому мне нужно, чтобы данные отображались в Excel, как если бы они были из стандартного подключения к базе данных.

Я искал отправную точку, но я изо всех сил пытаюсь найти некоторую информацию, которая поможет с этим очень конкретным требованием. Кто-нибудь может помочь?

Ответы [ 3 ]

2 голосов
/ 22 февраля 2010

Начните с загрузки VSTO (Инструменты Visual Studio для Office) Это позволит вам создать надстройку C # Excel.

В Visual Studio при создании нового проекта вы будетесм. Офис, и вы сможете выбрать из него Excel.

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

Несколько полезных советов по работе с Excel.

Чтобы выбрать активный лист:

Excel.Worksheet sheet = this.Application.ActiveSheet as Excel.Worksheet;

Чтобы выбрать определенный диапазон (в данном случае A1 - B5):

Excel.Range range = sheet.get_Range("A1", "B5") as Excel.Range;

Чтобы установить значение для всего диапазона:

 range.Value2 = 2; //will set every cell in A1 through B5 to 2

Вы можете получить значения из диапазона в двумерном массиве, например:

object[,] values = range.Value2 as object[,];
//this will return an multidimensional array representing rows and cols
//as you see in the range. in this case the array is filed with "2"

Затем вы можете изменить значения во всем массиве и применить обратно к диапазону:

   values[2, 2] = 4;  //will change the value to 4 in row 2, col 2 of the *range*
   range.Value2 = values; //set back the whole range to the array

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

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

Excel.Range cell = range.Cells[1,1] as Excel.Range; //this will take the cell from row 1, cell 1. if you used array this would be values[1,1]
string value = (cell.Value2 ?? "").ToString();

Это должно позволить вам выполнять основные задачи в Excel, выМожно установить значения и получить значения и выбрать диапазоны.Если у вас есть более конкретный вопрос, пожалуйста, возвращайтесь.

Не забывайте, что массивы из Excel основаны на 1, а не на нулях !!!

0 голосов
/ 10 мая 2015

Для автоматического обновления вы захотите создать DLL, которая реализует COM-интерфейс Excel RealTimeData (RTD). Смотри https://support.microsoft.com/en-us/kb/285339.

Поскольку вы хотите сделать это в C #, Excel DNA (https://exceldna.codeplex.com/) - это самое простое место для начала, которое выполнит большую часть работы за вас.

0 голосов
/ 12 марта 2010

Вы можете попробовать использовать XLLoop . Это позволяет вам создавать функции Excel (UDF) на разных языках на сервере. Таким образом, вы можете написать функцию, которая возвращает данные - пользователь будет использовать Shift-F9 для обновления.

Здесь есть базовая реализация сервера C #: http://winrun4j.cvs.sourceforge.net/viewvc/winrun4j/org.boris.xlloop/servers/csharp/

Кстати, я работаю над проектом, поэтому дайте мне знать, если у вас есть какие-либо вопросы.

...