2010-02-22 5 views
4

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

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

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

+0

Вы когда-нибудь находите то, что искали? Я также пытаюсь найти ресурсы ... возможно, я не знаю, какие ключевые слова я ищу с этим, но у нас есть то же самое, что мы хотим сделать. Просто любопытно, что вы сделали, чтобы заставить его работать (много лет назад). Благодарю. – TravisWhidden

ответ

2

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

В Visual Studio при создании нового проекта вы увидите Office, и вы сможете выбрать 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 

Вы можете получить значения из диапазона в 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 

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

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

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

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

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

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

0

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

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

Смежные вопросы