Office birlikte çalışma nesnelerine erişme
C# uygulamasının Office API nesnelerine erişimi basitleştiren özellikleri vardır. Yeni özellikler arasında adlandırılmış ve isteğe bağlı bağımsız değişkenler, adlı dynamic
yeni bir tür ve COM yöntemlerindeki başvuru parametrelerine değer parametreleriymiş gibi bağımsız değişkenler geçirebilme özelliği yer alır.
Bu makalede, Microsoft Office Excel çalışma sayfası oluşturan ve görüntüleyen kod yazmak için yeni özellikleri kullanacaksınız. Excel çalışma sayfasına bağlı bir simge içeren bir Office Word belgesi eklemek için kod yazarsınız.
Bu kılavuzu tamamlamak için bilgisayarınızda Microsoft Office Excel 2007 ve Microsoft Office Word 2007 veya sonraki sürümleri yüklü olmalıdır.
Not
Bilgisayarınız, aşağıdaki yönergelerde yer alan Visual Studio kullanıcı arabirimi öğelerinden bazıları için farklı adlar veya konumlar gösterebilir. Sahip olduğunuz Visual Studio sürümü ve kullandığınız ayarlar bu öğeleri belirler. Daha fazla bilgi için bkz. IDE’yi kişiselleştirme.
Önemli
VSTO (Office için Visual Studio Araçları) .NET Framework'e dayanır. COM eklentileri .NET Framework ile de yazılabilir. Office Eklentileri.NET'in en son sürümleri olan .NET Core ve .NET 5+ ile oluşturulamaz. Bunun nedeni .NET Core/.NET 5+'ın aynı işlemde .NET Framework ile birlikte çalışamaması ve eklenti yükleme hatalarına yol açabileceğidir. Office için VSTO ve COM eklentileri yazmak için .NET Framework'ü kullanmaya devam edebilirsiniz. Microsoft, .NET Core veya .NET 5+ kullanmak için VSTO veya COM eklenti platformunu güncelleştirmeyecektir. Office Web Eklentileri'nin sunucu tarafını oluşturmak için .NET Core ve .NET 5+ ASP.NET Core'un avantajlarından yararlanabilirsiniz.
Yeni bir konsol uygulaması oluşturmak için
- Visual Studio’yu çalıştırın.
- Dosya menüsünde Yeni'nin üzerine gelin ve Proje'yi seçin. Yeni Proje iletişim kutusu görünür.
- Yüklü Şablonlar bölmesinde C# öğesini genişletin ve Ardından Windows'u seçin.
- Hedef çerçeve olarak .NET Framework 4 (veya sonraki bir sürüm) seçtiğinizden emin olmak için Yeni Proje iletişim kutusunun en üstüne bakın.
- Şablonlar bölmesinde Konsol Uygulaması'nı seçin.
- Ad alanına projeniz için bir ad yazın.
- Tamam'ı seçin.
Yeni proje Çözüm Gezgini görüntülenir.
Başvuru eklemek için
- Çözüm Gezgini'da projenizin adına sağ tıklayın ve ardından Başvuru Ekle'yi seçin. Başvuru Ekle iletişim kutusu görüntülenir.
- Derlemeler sayfasında, Bileşen Adı listesinde Microsoft.Office.Interop.Word'u seçin ve ardından CTRL tuşunu basılı tutarak Microsoft.Office.Interop.Excel'i seçin. Derlemeleri görmüyorsanız bunları yüklemeniz gerekebilir. Bkz . Nasıl yapılır: Office Birincil Birlikte Çalışma Derlemelerini Yükleme.
- Tamam'ı seçin.
Gerekli kullanım yönergelerini eklemek için
Çözüm Gezgini'da, Program.cs dosyasına sağ tıklayıp Kodu Görüntüle'yi seçin. Kod dosyasının en üstüne aşağıdaki using
yönergeleri ekleyin:
using Excel = Microsoft.Office.Interop.Excel;
using Word = Microsoft.Office.Interop.Word;
Banka hesaplarının listesini oluşturmak için
Aşağıdaki sınıf tanımını sınıfın altındaki Program.cs yapıştırın Program
.
public class Account
{
public int ID { get; set; }
public double Balance { get; set; }
}
İki hesap içeren bir bankAccounts
liste oluşturmak için yöntemine aşağıdaki kodu Main
ekleyin.
// Create a list of accounts.
var bankAccounts = new List<Account> {
new Account {
ID = 345678,
Balance = 541.27
},
new Account {
ID = 1230221,
Balance = -127.44
}
};
Hesap bilgilerini Excel'e aktaran bir yöntem bildirmek için
- Bir Excel çalışma sayfası ayarlamak için sınıfına
Program
aşağıdaki yöntemi ekleyin. Yöntemin Add belirli bir şablonu belirtmek için isteğe bağlı bir parametresi vardır. İsteğe bağlı parametreler, parametrenin varsayılan değerini kullanmak istiyorsanız bu parametrenin bağımsız değişkenini atlamanızı sağlar. Bağımsız değişken sağlamadığınız için varsayılanAdd
şablonu kullanır ve yeni bir çalışma kitabı oluşturur. C# öğesinin önceki sürümlerindeki eşdeğer deyim için yer tutucu bağımsız değişkeni gerekir:ExcelApp.Workbooks.Add(Type.Missing)
.
static void DisplayInExcel(IEnumerable<Account> accounts)
{
var excelApp = new Excel.Application();
// Make the object visible.
excelApp.Visible = true;
// Create a new, empty workbook and add it to the collection returned
// by property Workbooks. The new workbook becomes the active workbook.
// Add has an optional parameter for specifying a particular template.
// Because no argument is sent in this example, Add creates a new workbook.
excelApp.Workbooks.Add();
// This example uses a single workSheet. The explicit type casting is
// removed in a later procedure.
Excel._Worksheet workSheet = (Excel.Worksheet)excelApp.ActiveSheet;
}
sonuna DisplayInExcel
aşağıdaki kodu ekleyin. Kod, çalışma sayfasının ilk satırının ilk iki sütununa değer ekler.
// Establish column headings in cells A1 and B1.
workSheet.Cells[1, "A"] = "ID Number";
workSheet.Cells[1, "B"] = "Current Balance";
sonuna DisplayInExcel
aşağıdaki kodu ekleyin. döngü, foreach
hesap listesindeki bilgileri çalışma sayfasının ardışık satırlarının ilk iki sütununa yerleştirir.
var row = 1;
foreach (var acct in accounts)
{
row++;
workSheet.Cells[row, "A"] = acct.ID;
workSheet.Cells[row, "B"] = acct.Balance;
}
Sütun genişliklerini içeriğe uyacak şekilde ayarlamak için sonuna DisplayInExcel
aşağıdaki kodu ekleyin.
workSheet.Columns[1].AutoFit();
workSheet.Columns[2].AutoFit();
Önceki C# sürümleri, bir döndürdüğü ve AutoFit
bir Object
Excel Range yöntemi olduğundan ExcelApp.Columns[1]
bu işlemler için açık atama gerektirir. Aşağıdaki satırlarda atama gösterilmektedir.
((Excel.Range)workSheet.Columns[1]).AutoFit();
((Excel.Range)workSheet.Columns[2]).AutoFit();
C# derlemeye EmbedInteropTypes derleyici seçeneği tarafından başvurulursa veya Excel Birlikte Çalışma Türleri Ekleme özelliği true ise, döndürüleni Object
otomatik olarak olarak dönüştürür.dynamic
True, bu özelliğin varsayılan değeridir.
Projeyi çalıştırmak için
sonuna Main
aşağıdaki satırı ekleyin.
// Display the list in an Excel spreadsheet.
DisplayInExcel(bankAccounts);
CTRL+F5 tuşlarına basın. İki hesaptan verileri içeren bir Excel çalışma sayfası görüntülenir.
Word belgesi eklemek için
Aşağıdaki kod bir Word uygulaması açar ve Excel çalışma sayfasına bağlanan bir simge oluşturur. Bu adımda daha sonra sağlanan yöntemini CreateIconInWordDoc
sınıfına yapıştırın Program
. CreateIconInWordDoc
ve yöntemi çağrılarının AddPasteSpecialkarmaşıklığını azaltmak için adlandırılmış ve isteğe bağlı bağımsız değişkenleri kullanır. Bu çağrılar, başvuru parametrelerine sahip COM yöntemlerine yapılan çağrıları basitleştiren diğer iki özelliği içerir. İlk olarak, başvuru parametrelerine değer parametreleriymiş gibi bağımsız değişkenler gönderebilirsiniz. Başka bir ifadeyle, her başvuru parametresi için bir değişken oluşturmadan değerleri doğrudan gönderebilirsiniz. Derleyici, bağımsız değişken değerlerini tutmak için geçici değişkenler oluşturur ve çağrıdan döndüğünüzde değişkenleri atar. İkincisi, bağımsız değişken listesindeki anahtar sözcüğü atlayabilirsiniz ref
.
yöntemi, Add
tümü isteğe bağlı olan dört başvuru parametresine sahiptir. Varsayılan değerlerini kullanmak istiyorsanız, parametrelerin herhangi biri veya tümü için bağımsız değişkenleri atlayabilirsiniz.
yöntemi Pano'nun PasteSpecial
içeriğini ekler. yöntemi yedi başvuru parametresine sahiptir ve bunların tümü isteğe bağlıdır. Aşağıdaki kod, ikisi için bağımsız değişkenleri belirtir: Link
Pano içeriğinin kaynağına bir bağlantı oluşturmak için ve DisplayAsIcon
bağlantıyı simge olarak görüntülemek için . Bu iki bağımsız değişken için adlandırılmış bağımsız değişkenler kullanabilir ve diğerlerini atlayabilirsiniz. Bu bağımsız değişkenler başvuru parametreleri olsa da, anahtar sözcüğünü ref
kullanmanız veya bağımsız değişken olarak göndermek üzere değişkenler oluşturmanız gerekmez. Değerleri doğrudan gönderebilirsiniz.
static void CreateIconInWordDoc()
{
var wordApp = new Word.Application();
wordApp.Visible = true;
// The Add method has four reference parameters, all of which are
// optional. Visual C# allows you to omit arguments for them if
// the default values are what you want.
wordApp.Documents.Add();
// PasteSpecial has seven reference parameters, all of which are
// optional. This example uses named arguments to specify values
// for two of the parameters. Although these are reference
// parameters, you do not need to use the ref keyword, or to create
// variables to send in as arguments. You can send the values directly.
wordApp.Selection.PasteSpecial( Link: true, DisplayAsIcon: true);
}
sonuna Main
aşağıdaki deyimini ekleyin.
// Create a Word document that contains an icon that links to
// the spreadsheet.
CreateIconInWordDoc();
sonuna DisplayInExcel
aşağıdaki deyimini ekleyin. yöntemi çalışma Copy
sayfasını Pano'ya ekler.
// Put the spreadsheet contents on the clipboard. The Copy method has one
// optional parameter for specifying a destination. Because no argument
// is sent, the destination is the Clipboard.
workSheet.Range["A1:B3"].Copy();
CTRL+F5 tuşlarına basın. Simge içeren bir Word belgesi görüntülenir. Çalışma sayfasını ön plana getirmek için simgeye çift tıklayın.
Birlikte Çalışma Türlerini Ekle özelliğini ayarlamak için
Çalışma zamanında birincil birlikte çalışma derlemesi (PIA) gerektirmeyen bir COM türünü çağırdığınızda daha fazla geliştirme yapılabilir. PIA'lara bağımlılığın kaldırılması sürüm bağımsızlığı ve daha kolay dağıtımla sonuçlanabilir. PIA'lar olmadan programlamanın avantajları hakkında daha fazla bilgi için bkz . İzlenecek Yol: Yönetilen Derlemelerden Türleri Ekleme.
Ayrıca, türü COM yöntemlerinde dynamic
bildirilen gerekli ve döndürülen türleri temsil ettiğinden programlama daha kolaydır. Türü dynamic
olan değişkenler çalışma zamanına kadar değerlendirilmez ve bu da açık tür atama gereksinimini ortadan kaldırır. Daha fazla bilgi için bkz . Tür dinamik kullanma.
PIA'ları kullanmak yerine tür bilgilerini eklemek varsayılan davranıştır. Bu varsayılan nedenle, önceki örneklerden bazıları basitleştirilmiştir. Herhangi bir açık atamaya ihtiyacınız yoktur. Örneğin, bildirimi worksheet
DisplayInExcel
yerine olarak Excel._Worksheet workSheet = excelApp.ActiveSheet
Excel._Worksheet workSheet = (Excel.Worksheet)excelApp.ActiveSheet
yazılır. aynı yöntemde çağrısı AutoFit
da varsayılan olmadan açık atama gerektirir, çünkü ExcelApp.Columns[1]
bir Object
döndürür ve AutoFit
bir Excel yöntemidir. Aşağıdaki kod, atamayı gösterir.
((Excel.Range)workSheet.Columns[1]).AutoFit();
((Excel.Range)workSheet.Columns[2]).AutoFit();
Varsayılan değeri değiştirmek ve tür bilgilerini eklemek yerine PIA'ları kullanmak için, Çözüm Gezgini'da Başvurular düğümünü genişletin ve ardından Microsoft.Office.Interop.Excel veya Microsoft.Office.Interop.Word'u seçin. Özellikler penceresini göremiyorsanız F4 tuşuna basın. Özellik listesinde Birlikte Çalışma Türleri Ekle'yi bulun ve değerini False olarak değiştirin. Benzer şekilde, bir komut isteminde EmbedInteropTypes yerine References derleyicisi seçeneğini kullanarak derleyebilirsiniz.
Tabloya ek biçimlendirme eklemek için
içindeki iki çağrısını AutoFit
DisplayInExcel
aşağıdaki deyimle değiştirin.
// Call to AutoFormat in Visual C# 2010.
workSheet.Range["A1", "B3"].AutoFormat(
Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2);
AutoFormat yöntemi yedi değer parametresine sahiptir ve bunların tümü isteğe bağlıdır. Adlandırılmış ve isteğe bağlı bağımsız değişkenler hiçbiri, bazıları veya tümü için bağımsız değişkenler sağlamanıza olanak tanır. Önceki deyimde, parametrelerin yalnızca biri için bir bağımsız değişken sağlarsınız: Format
. Format
Parametre listesindeki ilk parametre olduğundan, parametre adını sağlamanız gerekmez. Ancak, aşağıdaki kodda gösterildiği gibi parametre adını eklerseniz deyimini anlamak daha kolay olabilir.
// Call to AutoFormat in Visual C# 2010.
workSheet.Range["A1", "B3"].AutoFormat(Format:
Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2);
Sonucu görmek için CTRL+F5 tuşlarına basın. Numaralandırmada listelenen XlRangeAutoFormat diğer biçimleri bulabilirsiniz.
Örnek
Aşağıdaki kod, tam örneği gösterir.
using System.Collections.Generic;
using Excel = Microsoft.Office.Interop.Excel;
using Word = Microsoft.Office.Interop.Word;
namespace OfficeProgrammingWalkthruComplete
{
class Walkthrough
{
static void Main(string[] args)
{
// Create a list of accounts.
var bankAccounts = new List<Account>
{
new Account {
ID = 345678,
Balance = 541.27
},
new Account {
ID = 1230221,
Balance = -127.44
}
};
// Display the list in an Excel spreadsheet.
DisplayInExcel(bankAccounts);
// Create a Word document that contains an icon that links to
// the spreadsheet.
CreateIconInWordDoc();
}
static void DisplayInExcel(IEnumerable<Account> accounts)
{
var excelApp = new Excel.Application();
// Make the object visible.
excelApp.Visible = true;
// Create a new, empty workbook and add it to the collection returned
// by property Workbooks. The new workbook becomes the active workbook.
// Add has an optional parameter for specifying a particular template.
// Because no argument is sent in this example, Add creates a new workbook.
excelApp.Workbooks.Add();
// This example uses a single workSheet.
Excel._Worksheet workSheet = excelApp.ActiveSheet;
// Earlier versions of C# require explicit casting.
//Excel._Worksheet workSheet = (Excel.Worksheet)excelApp.ActiveSheet;
// Establish column headings in cells A1 and B1.
workSheet.Cells[1, "A"] = "ID Number";
workSheet.Cells[1, "B"] = "Current Balance";
var row = 1;
foreach (var acct in accounts)
{
row++;
workSheet.Cells[row, "A"] = acct.ID;
workSheet.Cells[row, "B"] = acct.Balance;
}
workSheet.Columns[1].AutoFit();
workSheet.Columns[2].AutoFit();
// Call to AutoFormat in Visual C#. This statement replaces the
// two calls to AutoFit.
workSheet.Range["A1", "B3"].AutoFormat(
Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2);
// Put the spreadsheet contents on the clipboard. The Copy method has one
// optional parameter for specifying a destination. Because no argument
// is sent, the destination is the Clipboard.
workSheet.Range["A1:B3"].Copy();
}
static void CreateIconInWordDoc()
{
var wordApp = new Word.Application();
wordApp.Visible = true;
// The Add method has four reference parameters, all of which are
// optional. Visual C# allows you to omit arguments for them if
// the default values are what you want.
wordApp.Documents.Add();
// PasteSpecial has seven reference parameters, all of which are
// optional. This example uses named arguments to specify values
// for two of the parameters. Although these are reference
// parameters, you do not need to use the ref keyword, or to create
// variables to send in as arguments. You can send the values directly.
wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true);
}
}
public class Account
{
public int ID { get; set; }
public double Balance { get; set; }
}
}