Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Podsumowanie
W tym artykule pokazano, jak zautomatyzować program Microsoft Excel przy użyciu programu Microsoft Visual C# 2005 lub microsoft Visual C# .NET w celu wypełniania i pobierania wartości w zakresie wielu komórek przy użyciu tablic.
Więcej informacji
Aby wypełnić zakres wielu komórek bez wypełniania komórek pojedynczo, można ustawić właściwość Value obiektu Range na tablicę dwuwymiarową. Podobnie można pobrać dwuwymiarową tablicę wartości dla wielu komórek jednocześnie przy użyciu właściwości Value. W poniższych krokach przedstawiono ten proces ustawiania i pobierania danych przy użyciu tablic dwuwymiarowych.
Tworzenie klienta usługi Automation dla programu Microsoft Excel
Uruchom program Microsoft Visual Studio 2005 lub Microsoft Visual Studio .NET.
W menu Plik kliknij pozycję Nowy, a następnie kliknij pozycję Projekt. Wybierz pozycję Aplikacja systemu Windows z typów projektów języka Visual C#. Formularz 1 jest tworzony domyślnie.
Dodaj odwołanie do biblioteki obiektów programu Microsoft Excel 11.0 w programie Visual Studio 2005 lub Biblioteki obiektów programu Microsoft Excel w programie Visual Studio .NET. Aby to zrobić, wykonaj następujące kroki.
- W menu Projekt kliknij pozycję Dodaj odwołanie.
- Na karcie COM znajdź bibliotekę obiektów programu Microsoft Excel, a następnie kliknij pozycję Wybierz.
W programie Visual Studio 2005 znajdź bibliotekę obiektów programu Microsoft Excel 11.0 na karcie COM .
Uwaga Pakiet Microsoft Office 2003 obejmuje podstawowe zestawy międzyoperacyjności (PIA). Pakiet Microsoft Office XP nie zawiera identyfikatorów PIA, ale mogą zostać pobrane.
Kliknij przycisk OK w oknie dialogowym Dodawanie odwołań, aby zaakceptować wybrane opcje. Jeśli zostanie wyświetlony monit o wygenerowanie otok dla wybranych bibliotek, kliknij przycisk Tak.
W menu Widok wybierz pozycję Przybornik, aby wyświetlić przybornik. Dodaj dwa przyciski i pole wyboru do formularza Form1.
Ustaw właściwości Nazwa i Tekst dla pola wyboru FillWithStrings.
Kliknij dwukrotnie przycisk Button1. Zostanie wyświetlone okno kodu formularza.
W oknie kodu zastąp następujący kod:
private void button1_Click(object sender, System.EventArgs e) { }
Z:
//Declare these two variables globally so you can access them from both //Button1 and Button2. Excel.Application objApp; Excel._Workbook objBook; private void button1_Click(object sender, System.EventArgs e) { Excel.Workbooks objBooks; Excel.Sheets objSheets; Excel._Worksheet objSheet; Excel.Range range; try { // Instantiate Excel and start a new workbook. objApp = new Excel.Application(); objBooks = objApp.Workbooks; objBook = objBooks.Add( Missing.Value ); objSheets = objBook.Worksheets; objSheet = (Excel._Worksheet)objSheets.get_Item(1); //Get the range where the starting cell has the address //m_sStartingCell and its dimensions are m_iNumRows x m_iNumCols. range = objSheet.get_Range("A1", Missing.Value); range = range.get_Resize(5, 5); if (this.FillWithStrings.Checked == false) { //Create an array. double[,] saRet = new double[5, 5]; //Fill the array. for (long iRow = 0; iRow < 5; iRow++) { for (long iCol = 0; iCol < 5; iCol++) { //Put a counter in the cell. saRet[iRow, iCol] = iRow * iCol; } } //Set the range value to the array. range.set_Value(Missing.Value, saRet ); } else { //Create an array. string[,] saRet = new string[5, 5]; //Fill the array. for (long iRow = 0; iRow < 5; iRow++) { for (long iCol = 0; iCol < 5; iCol++) { //Put the row and column address in the cell. saRet[iRow, iCol] = iRow.ToString() + "|" + iCol.ToString(); } } //Set the range value to the array. range.set_Value(Missing.Value, saRet ); } //Return control of Excel to the user. objApp.Visible = true; objApp.UserControl = true; } catch( Exception theException ) { String errorMessage; errorMessage = "Error: "; errorMessage = String.Concat( errorMessage, theException.Message ); errorMessage = String.Concat( errorMessage, " Line: " ); errorMessage = String.Concat( errorMessage, theException.Source ); MessageBox.Show( errorMessage, "Error" ); } }
Uwaga Musisz zmienić kod w programie Visual Studio 2005. Domyślnie program Visual C# dodaje jeden formularz do projektu podczas tworzenia projektu Windows Forms. Formularz nosi nazwę Form1. Dwa pliki reprezentujące formularz mają nazwy Form1.cs i Form1.designer.cs. Kod jest pisany w pliku Form1.cs. Plik Form1.designer.cs to miejsce, w którym projektant Windows Forms zapisuje kod implementujący wszystkie akcje wykonywane przez przeciąganie i usuwanie kontrolek z przybornika.
Aby uzyskać więcej informacji na temat projektanta Windows Forms w programie Visual C# 2005, odwiedź następującą witrynę sieci Web microsoft developer network (MSDN):
Wróć do widoku projektu formularza Form1 i kliknij dwukrotnie przycisk Button2.
W oknie kodu zastąp następujący kod:
private void button2_Click(object sender, System.EventArgs e)
{
}
Z:
private void button2_Click(object sender, System.EventArgs e)
{
Excel.Sheets objSheets;
Excel._Worksheet objSheet;
Excel.Range range;
try
{
try
{
//Get a reference to the first sheet of the workbook.
objSheets = objBook.Worksheets;
objSheet = (Excel._Worksheet)objSheets.get_Item(1);
}
catch( Exception theException )
{
String errorMessage;
errorMessage = "Can't find the Excel workbook. Try clicking Button1 " +
"to create an Excel workbook with data before running Button2.";
MessageBox.Show( errorMessage, "Missing Workbook?");
//You can't automate Excel if you can't find the data you created, so
//leave the subroutine.
return;
}
//Get a range of data.
range = objSheet.get_Range("A1", "E5");
//Retrieve the data from the range.
Object[,] saRet;
saRet = (System.Object[,])range.get_Value( Missing.Value );
//Determine the dimensions of the array.
long iRows;
long iCols;
iRows = saRet.GetUpperBound(0);
iCols = saRet.GetUpperBound(1);
//Build a string that contains the data of the array.
String valueString;
valueString = "Array Data\n";
for (long rowCounter = 1; rowCounter <= iRows; rowCounter++)
{
for (long colCounter = 1; colCounter <= iCols; colCounter++)
{
//Write the next value into the string.
valueString = String.Concat(valueString,
saRet[rowCounter, colCounter].ToString() + ", ");
}
//Write in a new line.
valueString = String.Concat(valueString, "\n");
}
//Report the value of the array.
MessageBox.Show(valueString, "Array Values");
}
catch( Exception theException )
{
String errorMessage;
errorMessage = "Error: ";
errorMessage = String.Concat( errorMessage, theException.Message );
errorMessage = String.Concat( errorMessage, " Line: " );
errorMessage = String.Concat( errorMessage, theException.Source );
MessageBox.Show( errorMessage, "Error" );
}
}
Przewiń w górę okna kodu. Dodaj następujący wiersz na końcu listy dyrektyw using:
using System.Reflection; using Excel = Microsoft.Office.Interop.Excel;
Testowanie klienta usługi Automation
- Naciśnij klawisz F5, aby skompilować i uruchomić przykładowy program.
- Kliknij przycisk 1. Program uruchamia program Microsoft Excel z nowym skoroszytem i wypełnia komórki A1:E5 pierwszego arkusza danymi liczbowymi z tablicy.
- Kliknij przycisk Button2. Program pobiera dane w komórkach A1:E5 do nowej tablicy i wyświetla wyniki w polu komunikatu.
- Wybierz pozycję FillWithStrings, a następnie kliknij przycisk Button1, aby wypełnić komórki A1:E5 danymi ciągu.
Informacje
Aby uzyskać więcej informacji, odwiedź następującą witrynę sieci Web microsoft developer network (MSDN):
Programowanie pakietu Microsoft Office przy użyciu programu Visual Studio