Bu adım adım makalede, verileri bir Microsoft Visual C# 2005 veya Microsoft Visual C# .NET programından Microsoft Excel 2002'ye aktarmak için birkaç yöntem açıklanır. Durumunuza en uygun çözüm seçebilmeniz makalede avantajları ve dezavantajları her yöntemi de sunar.
Bir Excel çalışma kitabına veri aktarmak için en sık kullanılan yöntem Automation ' dir. Otomasyon ile yöntemler ve özellikler Excel görevlere özgü çağırabilirsiniz. Otomasyon çalışma kitabındaki verilerin konumunu belirten, çalışma kitabı biçimlendirme ve çalışma zamanı sırasında çeşitli ayarlarını yapmak için en fazla esnekliği sağlar.
Otomasyon ile veri aktarmak için çeşitli teknikler kullanabilirsiniz:
<a1>Veri</a1> tarafından hücrenin hücre aktarın.
Dizideki veri, bir hücre aralığına aktarın.
ADO kayıt kümesindeki verileri CopyFromRecordset yöntemini kullanarak, bir hücre aralığına aktarın.
OLEDB ya da ODBC veri kaynağı üzerinde sorgu sonuçlarını içeren bir Excel çalışma sayfasında bir sorgu tablosu oluşturun.
Panoya veri aktarımı ve Pano içeriğini bir Excel çalışma sayfasına yapıştırın.
Ayrıca, verileri Excel'e aktarmak Otomasyon gerektirmeyebilecek birkaç yöntem kullanabilirsiniz. Sunucu tarafında çalışan bir program çalıştırıyorsanız, bu veri işleme istemcilerinizin uzağa toplu alma için iyi bir yaklaşım olabilir.
Otomasyon olmadan verilerinizi aktarmak için aşağıdaki yaklaşımlardan kullanabilirsiniz:
Verilerinizi, çalışma sayfasındaki hücrelere, Excel daha sonra ayrıştırabilir sekmeyle sınırlı veya virgülle sınırlandırılmış bir metin dosyasına aktarabilirsiniz.
Verilerinizi, ADO.NET kullanarak bir çalışma sayfasına aktarın.
XML verileri biçimlendirilmiş ve satırlar ve sütunlar düzenlendiği bir veri sağlamak için Excel (sürüm 2002 ve 2003) aktarın.
<a1>Veri</a1> tarafından hücre hücre aktarmak için Otomasyon kullanma
Otomasyon ile tek bir çalışma sayfası hücresiyle aynı anda aktarabilirsiniz:
// Start a new workbook in Excel.
m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
// Add data to cells in the first worksheet in the new workbook.
m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
m_objRange = m_objSheet.get_Range("A1", m_objOpt);
m_objRange.Value = "Last Name";
m_objRange = m_objSheet.get_Range("B1", m_objOpt);
m_objRange.Value = "First Name";
m_objRange = m_objSheet.get_Range("A2", m_objOpt);
m_objRange.Value = "Doe";
m_objRange = m_objSheet.get_Range("B2", m_objOpt);
m_objRange.Value = "John";
// Apply bold to cells A1:B1.
m_objRange = m_objSheet.get_Range("A1", "B1");
m_objFont = m_objRange.Font;
m_objFont.Bold=true;
// Save the Workbook and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book1.xls", m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange,
m_objOpt, m_objOpt, m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();
verilerin küçük bir miktar varsa, <a1>veri</a1> tarafından hücrenin hücre aktarma kabul edilebilir yaklaşımıdır. Verileri çalışma kitabında herhangi bir yere koymak esnekliği vardır ve koşullu çalışma zamanında hücreleri biçimlendirebilirsiniz. Ancak, bu verileri bir Excel çalışma kitabına transfer etmek için büyük bir miktar varsa, bu yaklaşımı kullanmak için iyi bir fikir değildir. Her aralığı nesne sırasında çalıştırma sonuçları arabirimi isteğinden veri anlamına gelir elde daha yavaş aktarır. Ayrıca, Microsoft Windows 95, Microsoft Windows 98 ve Microsoft Windows Millennium Edition (Me) arabirimi isteklerinde 64 kilobayt (KB) bir sınırlama vardır. Bilgisayarınızda birden fazla arabirim istekleri 64 KB, Otomasyon sunucusunu (Excel) yanıt vermeyebilir veya bellek belirten hata iletileri alabilirsiniz. Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
216400
(http://support.microsoft.com/kb/216400/EN-US/
)
SORUN: İşlem geçici COM otomasyon istemci uygulamasını Win95/98 askıda
Yeniden tarafından hücrenin hücre veri aktarımı yalnızca küçük miktarda veri için kabul edilebilir;. Büyük veri kümeleri Excel'e Aktar toplu veri aktarmak için bu makalede anlatılan diğer yaklaşımdan birini kullanmayı.
Ek bilgi için ve Visual C# .NET ile otomatikleştirme Excel'in bir örnek için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
302084
(http://support.microsoft.com/kb/302084/EN-US/
)
Nasıl YAPıLıR: Microsoft Visual C# .NET, Microsoft Excel'den otomatikleştirme
Bir veri dizisi için bir aralık, bir çalışma sayfası üzerinde aktarmak için Otomasyon kullanma
Aynı anda birden fazla hücre aralığı için veri dizisi aktarabilirsiniz:
// Start a new workbook in Excel.
m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
// Create an array for the headers and add it to cells A1:C1.
object[] objHeaders = {"Order ID", "Amount", "Tax"};
m_objRange = m_objSheet.get_Range("A1", "C1");
m_objRange.Value = objHeaders;
m_objFont = m_objRange.Font;
m_objFont.Bold=true;
// Create an array with 3 columns and 100 rows and add it to
// the worksheet starting at cell A2.
object[,] objData = new Object[100,3];
Random rdm = new Random((int)DateTime.Now.Ticks);
double nOrderAmt, nTax;
for(int r=0;r<100;r++)
{
objData[r,0] = "ORD" + r.ToString("0000");
nOrderAmt = rdm.Next(1000);
objData[r,1] = nOrderAmt.ToString("c");
nTax = nOrderAmt*0.07;
objData[r,2] = nTax.ToString("c");
}
m_objRange = m_objSheet.get_Range("A2", m_objOpt);
m_objRange = m_objRange.get_Resize(100,3);
m_objRange.Value = objData;
// Save the Workbook and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book2.xls", m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange,
m_objOpt, m_objOpt, m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();
Hücrenin hücre yerine göre bir dizi kullanarak verilerinizi aktarmak, çok sayıda veri ile bir aşırı büyük performans kazanç farkına. 300 Çalışma sayfasındaki hücrelere veri aktarımı aşağıdaki sistemde yukarıda belirtilen kod satırlarından göz önünde bulundurun:
bu iki arabirim istekleri temsil: bir aralığı yöntemi veren Aralık nesnesi, bir başka aralığı nesneyi yeniden boyutlandırma yöntemi döndürür. Buna ek olarak, tarafından hücrenin hücre veri aktarma istekleri 300 arabirimleri aralığı nesnelere gerektirir. Mümkün olduğunda toplu veri aktarımı ve yaptığınız arabirimi isteklerin sayısını azaltmayı yararlanabilirsiniz.
Diziler, almak ve Excel otomasyonu ile aralıklardaki değerleri ayarlamak için kullanma hakkında ek bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
302096
(http://support.microsoft.com/kb/302096/EN-US/
)
Nasıl YAPıLıR: Excel veri dizileri kullanarak bir aralık içinde elde ya da doldurmak için Visual C# .NET ile otomatikleştirme
Bir ADO Recordset için bir çalışma sayfası aralığı aktarmak için Otomasyon kullanma
Excel 2000, Excel 2002 ve Excel 2003 için nesne modellerini CopyFromRecordset bir ADO kayıt aralığı için bir çalışma sayfasına aktarma yöntemi sağlar. Aşağıdaki kod, Northwind örnek veritabanındaki Orders tablosundaki içeriğini CopyFromRecordset yöntemini kullanarak aktarmak için Excel otomatikleştirmek verilmektedir:
// Create a Recordset from all the records in the Orders table.
ADODB.Connection objConn = new ADODB.Connection();
ADODB._Recordset objRS = null;
objConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
m_strNorthwind + ";", "", "", 0);
objConn.CursorLocation = ADODB.CursorLocationEnum.adUseClient;
object objRecAff;
objRS = (ADODB._Recordset)objConn.Execute("Orders", out objRecAff,
(int)ADODB.CommandTypeEnum.adCmdTable);
// Start a new workbook in Excel.
m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
// Get the Fields collection from the recordset and determine
// the number of fields (or columns).
System.Collections.IEnumerator objFields = objRS.Fields.GetEnumerator();
int nFields = objRS.Fields.Count;
// Create an array for the headers and add it to the
// worksheet starting at cell A1.
object[] objHeaders = new object[nFields];
ADODB.Field objField = null;
for(int n=0;n<nFields;n++)
{
objFields.MoveNext();
objField = (ADODB.Field)objFields.Current;
objHeaders[n] = objField.Name;
}
m_objRange = m_objSheet.get_Range("A1", m_objOpt);
m_objRange = m_objRange.get_Resize(1, nFields);
m_objRange.Value = objHeaders;
m_objFont = m_objRange.Font;
m_objFont.Bold=true;
// Transfer the recordset to the worksheet starting at cell A2.
m_objRange = m_objSheet.get_Range("A2", m_objOpt);
m_objRange.CopyFromRecordset(objRS, m_objOpt, m_objOpt);
// Save the Workbook and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book3.xls", m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange,
m_objOpt, m_objOpt, m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();
// Close the recordset and connection.
objRS.Close();
objConn.Close();
CopyFromRecordsetNot ADO Recordset nesneleriyle çalışır. CopyFromRecordset yöntemiyle ADO.NET kullanarak oluşturduğunuz DataSet kullanamazsınız. Izleyen bölümlerde, birkaç örnek veri ADO.NET ile Excel'e aktarma yöntemini gösterir.
Bir çalışma sayfası üzerinde bir sorgu tablosu nesnesi oluşturmak için Otomasyon kullanma
Bir sorgu tablosu nesnesi, bir dış veri kaynağından döndürülen verilerin yerleşik bir tablo gösterir. Excel'in otomatik hale getirmek, bir OLE DB veya ODBC veri kaynağı ve bir SQL dizesi bir bağlantı dizesi sağlayarak, bir sorgu tablosu oluşturabilirsiniz. Excel, kayıt kümesini oluşturur ve kayıt kümesini, belirttiğiniz konumda çalışma sayfası ekler. Sorgu tablosu nesneleri CopyFromRecordset yöntemine göre aşağıdaki avantajları sunar:
Excel, recordset ve çalışma sayfasında, yerleşim oluşturulmasını yönetir.
Sorguyu sorgu tablosu nesneyle kaydetmek ve daha sonra güncelleştirilen bir recordset'i edinmek için yenileyin.
Çalışma kitabınıza yeni bir sorgu tablosu eklendiğinde, çalışma sayfasındaki hücreleri zaten veri yeni veriyi kaydırılacağı uzaklık belirtebilirsiniz (daha fazla bilgi için bkz: RefreshStyle özellik).
Aşağıdaki kodda, Northwind örnek veritabanındaki verileri kullanarak bir Excel çalışma sayfasında, yeni bir sorgu tablosu oluşturmak için Excel 2000, Excel 2002 veya Excel 2003 otomatikleştirilir gösterilmiştir:
// Start a new workbook in Excel.
m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
// Create a QueryTable that starts at cell A1.
m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
m_objRange = m_objSheet.get_Range("A1", m_objOpt);
m_objQryTables = m_objSheet.QueryTables;
m_objQryTable = (Excel._QueryTable)m_objQryTables.Add(
"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
m_strNorthwind + ";", m_objRange, "Select * From Orders");
m_objQryTable.RefreshStyle = Excel.XlCellInsertionMode.xlInsertEntireRows;
m_objQryTable.Refresh(false);
// Save the workbook and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book4.xls", m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();
Windows panosuna kullanın.
Windows panosuna, verileri bir çalışma sayfasına aktarmak için kullanabilirsiniz. Birden çok çalışma sayfasındaki hücrelere veri yapıştırmak için <a0></a0>, bir dize sütunları SEKME karakterleriyle ayrılmış ve satır başlarını tarafından sınırlandırılır kopyalayabilirsiniz. Aşağıdaki kod, Visual C# .NET verileri Excel'e aktarmak için Windows panosuna nasıl kullanabileceğinizi gösterir:
// Copy a string to the Windows clipboard.
string sData = "FirstName\tLastName\tBirthdate\r\n" +
"Bill\tBrown\t2/5/85\r\n" +
"Joe\tThomas\t1/1/91";
System.Windows.Forms.Clipboard.SetDataObject(sData);
// Start a new workbook in Excel.
m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
// Paste the data starting at cell A1.
m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
m_objRange = m_objSheet.get_Range("A1", m_objOpt);
m_objSheet.Paste(m_objRange, false);
// Save the workbook and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book5.xls", m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();
Excel, satırlar ve sütunlar ayrıştırma sınırlandırılmış bir metin dosyası oluşturun.
Excel sekme veya virgülle sınırlandırılmış dosyalar'ı açın ve doğru verileri, hücrelere ayrıştırılamadı. Çok sayıda veri varsa, küçük Automation'ı kullanırken bir çalışma sayfasına transfer etmek istediğinizde, bu özelliği kullanabilirsiniz. Oluşturulan sunucu tarafındaki metin dosyası olduğundan, bu bir istemci-sunucu programı için iyi bir yaklaşım olabilir. Daha sonra uygun olan Otomasyonu'nu kullanarak istemcide metin dosyası da açabilirsiniz.
Aşağıdaki kod, ADO.NET ile okunan verileri sekme ile sınırlandırılmış metin dosyası oluşturmak verilmektedir:
// Connect to the data source.
System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_strNorthwind + ";");
objConn.Open();
// Execute a command to retrieve all records from the Employees table.
System.Data.OleDb.OleDbCommand objCmd = new System.Data.OleDb.OleDbCommand(
"Select * From Employees", objConn);
System.Data.OleDb.OleDbDataReader objReader;
objReader = objCmd.ExecuteReader();
// Create the FileStream and StreamWriter object to write
// the recordset contents to file.
System.IO.FileStream fs = new System.IO.FileStream(
m_strSampleFolder + "Book6.txt", System.IO.FileMode.Create);
System.IO.StreamWriter sw = new System.IO.StreamWriter(
fs, System.Text.Encoding.Unicode);
// Write the field names (headers) as the first line in the text file.
sw.WriteLine(objReader.GetName(0) + "\t" + objReader.GetName(1) +
"\t" + objReader.GetName(2) + "\t" + objReader.GetName(3) +
"\t" + objReader.GetName(4) + "\t" + objReader.GetName(5));
// Write the first six columns in the recordset to a text file as
// tab-delimited.
while(objReader.Read())
{
for(int i=0;i<=5;i++)
{
if(!objReader.IsDBNull(i))
{
string s;
s = objReader.GetDataTypeName(i);
if(objReader.GetDataTypeName(i)=="DBTYPE_I4")
{
sw.Write(objReader.GetInt32(i).ToString());
}
else if(objReader.GetDataTypeName(i)=="DBTYPE_DATE")
{
sw.Write(objReader.GetDateTime(i).ToString("d"));
}
else if (objReader.GetDataTypeName(i)=="DBTYPE_WVARCHAR")
{
sw.Write(objReader.GetString(i));
}
}
if(i<5) sw.Write("\t");
}
sw.WriteLine();
}
sw.Flush(); // Write the buffered data to the filestream.
// Close the FileStream.
fs.Close();
// Close the reader and the connection.
objReader.Close();
objConn.Close();
Hiçbir Otomasyonu sistemde yukarıda belirtilen kullanır. Isterseniz, ancak, otomasyon metin dosyası açın ve dosyayı Excel çalışma kitabı biçimi, buna benzer kaydetmek için kullanabilirsiniz:
// Open the text file in Excel.
m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBooks.OpenText(m_strSampleFolder + "Book6.txt", Excel.XlPlatform.xlWindows, 1,
Excel.XlTextParsingType.xlDelimited, Excel.XlTextQualifier.xlTextQualifierDoubleQuote,
false, true, false, false, false, false, m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt);
m_objBook = m_objExcel.ActiveWorkbook;
// Save the text file in the typical workbook format and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book6.xls", Excel.XlFileFormat.xlWorkbookNormal,
m_objOpt, m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();
ADO.NET kullanarak, bir çalışma sayfasına veri aktarma
Varolan bir Excel çalışma kitabındaki bir tabloya kayıt eklemek için Microsoft Jet OLE DB Sağlayıcısı'nı kullanabilirsiniz. Excel'de BIR Tablo yalnızca bir hücre aralığıdır; aralığı, tanımlı bir ad olabilir. Genellikle, aralığın ilk satırındaki üstbilgileri (veya alan adları) içeren ve kayıtlar aralıktaki tüm sonraki satırlar içeriyor.
Aşağıdaki kod bir tabloda Book7.xls iki yeni kayıt ekler. Tablo, bu durumda tablo1 olur:
// Establish a connection to the data source.
System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_strSampleFolder +
"Book7.xls;Extended Properties=Excel 8.0;");
objConn.Open();
// Add two records to the table named 'MyTable'.
System.Data.OleDb.OleDbCommand objCmd = new System.Data.OleDb.OleDbCommand();
objCmd.Connection = objConn;
objCmd.CommandText = "Insert into MyTable (FirstName, LastName)" +
" values ('Bill', 'Brown')";
objCmd.ExecuteNonQuery();
objCmd.CommandText = "Insert into MyTable (FirstName, LastName)" +
" values ('Joe', 'Thomas')";
objCmd.ExecuteNonQuery();
// Close the connection.
objConn.Close();
ADO.NET kayıtlarıyla eklediğinizde bu örnekte gösterildiği gibi çalışma kitabındaki biçimlendirme korunur. Her kayıt için bir satır eklenir, önceki satırın biçimini taşır.
ADO.NET kullanma hakkında ek bilgi için Microsoft Knowledge Base'deki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
306636
(http://support.microsoft.com/kb/306636/EN-US/
)
NASıL YAPıLıR: bir veritabanına bağlanmak ve ADO.NET ve Visual C# .NET kullanarak bir komutu çalıştır.
314145
(http://support.microsoft.com/kb/314145/EN-US/
)
NASıL YAPıLıR: bir veritabanından bir DataSet nesnesi, Visual C#. NET'i kullanarak doldurma
307587
(http://support.microsoft.com/kb/307587/EN-US/
)
NASıL YAPıLıR: bir veritabanından bir DataSet nesnesi, Visual C#. NET'i kullanarak güncelleştir
Excel veri kaynaklarıyla Jet OLEDB Sağlayıcısı kullanma hakkında ek bilgi için Microsoft Knowledge Base'deki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
316934
(http://support.microsoft.com/kb/316934/EN-US/
)
NASıL YAPıLıR: Alma için ADO.NET kullanın ve bir Excel çalışma kitabı Visual Basic .NET ile kayıtlarında Değiştir
278973
(http://support.microsoft.com/kb/278973/EN-US/
)
Örnek: ExcelADO nasıl okuma ve verileri Excel çalışma kitapları yazma için ADO kullanılacağını gösterir.
257819
(http://support.microsoft.com/kb/257819/EN-US/
)
Nasıl YAPıLıR: Excel verilerden Visual Basic'de veya VBA'DA ile ADO kullanma.
(Excel 2002 ve Excel 2003), XML verileri aktarma
Excel 2002 ve 2003 iyi biçimlendirilmiş olan herhangi bir XML dosyası da açabilirsiniz. Doğrudan Dosya menüsündeki Aç komutunu kullanarak veya programlı olarak açın veya Açık XMLçalışma kitaplarını toplama yöntemleri kullanarak, XML dosyalarını açabilirsiniz. Excel'de XML dosyaları oluşturursanız, verileri biçimlendirmek için stil sayfaları da oluşturabilirsiniz.
XML, Excel 2002 ile kullanma hakkında ek bilgi için Microsoft Knowledge Base'deki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
307029
(http://support.microsoft.com/kb/307029/EN-US/
)
NASıL YAPıLıR: Visual C#. NET'i kullanarak 2002 transfer XML Data Microsoft Excel
288215
(http://support.microsoft.com/kb/288215/EN-US/
)
BILGI: Microsoft Excel 2002 ve XML
C:\ExcelData adlı yeni bir klasör oluşturun. Örnek program, bu klasörde Excel çalışma kitaplarını depolar.
Yazmak örnek için yeni bir çalışma kitabı oluşturun:
Yeni bir çalışma kitabını, Excel'deki başlatın.
Yeni bir çalışma kitabının Sayfa1 üzerinde A1 hücresi ve Soyadı B1 hücresindeki adı yazın.
A1:B1 seçin.
Ekle menüsünden ad ' ın üzerine gelin ve Tanımla ' yı tıklatın. Tablom adı yazın ve Tamam ' ı tıklatın.
Çalışma kitabını C:\Exceldata\Book7.xls kaydedin.
Excel'den çıkın.
Microsoft Visual Studio 2005 veya Microsoft Visual Studio. NET'i başlatın. Dosya menüsünde Yeni ' nin üzerine gelin ve sonra Project ' i tıklatın. Visual C# Projects veya Visual C# altında Windows Application ' ı seçin. Varsayılan olarak, Form1 oluşturulur.
Excel nesne kitaplığı ve ADODB ana birlikte çalışma derlemesi için başvuru ekleyin. Bunu yapmak için şu adımları izleyin:
Proje) menüsünde Add Reference ' ı tıklatın.
NET sekmesinde ADODB bulun ve sonra da <a2>Seç</a2>'i tıklatın.
Not Visual Studio 2005'te Seç ' i gerekmez.
COM sekmesinde, Microsoft Excel 10.0 Nesne Kitaplığı ya da Microsoft Excel 11.0 Nesne Kitaplığı'nı bulun ve sonra da <a2>Seç</a2>'i tıklatın.
Not Visual Studio 2005'te Seç ' i gerekmez.
Not Microsoft, Microsoft Excel 2002 kullanıyorsanız ve önceden yapmadıysanız, karşıdan yükleyin ve sonra Microsoft Office XP Primary ınterop Assemblies (Pıa) yükleyin önerir. Office XP Pıa hakkında'daha fazla bilgi için Microsoft Knowledge Base'deki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
328912
(http://support.microsoft.com/kb/328912/
)
BILGI: Microsoft Office XP Pıa yükleme için kullanılabilir
Başvuru Ekle iletişim kutusuna seçimlerinizi kabul etmek için Tamam ' ı tıklatın.
Form1'e, bir Açılan kutu denetimi ve bir Düğme denetimi ekleyin.
Form Load olayı ve düğme denetimi tıklatarak olayları için olay işleyicileri ekleyin:
Form1.cs için Tasarım görünümünde Form1 ' ni çift tıklatın.
Formun Load olayı işleyicisini oluşturulur ve Form1.cs içinde görünür.
Görünüm</a0> menüsünde Görünüm Tasarla geçmek Designer ' ı tıklatın.
Button1</a1> çift tıklatın.
Düğmenin tıklatın olay işleyicisini oluşturulur ve Form1.cs içinde görünür.
// Excel object references.
private Excel.Application m_objExcel = null;
private Excel.Workbooks m_objBooks = null;
private Excel._Workbook m_objBook = null;
private Excel.Sheets m_objSheets = null;
private Excel._Worksheet m_objSheet = null;
private Excel.Range m_objRange = null;
private Excel.Font m_objFont = null;
private Excel.QueryTables m_objQryTables = null;
private Excel._QueryTable m_objQryTable = null;
// Frequenty-used variable for optional arguments.
private object m_objOpt = System.Reflection.Missing.Value;
// Paths used by the sample code for accessing and storing data.
private object m_strSampleFolder = "C:\\ExcelData\\";
private string m_strNorthwind = "C:\\Program Files\\Microsoft Office\\Office10\\Samples\\Northwind.mdb";
private void Form1_Load(object sender, System.EventArgs e)
{
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox1.Items.AddRange(new object[]{
"Use Automation to Transfer Data Cell by Cell ",
"Use Automation to Transfer an Array of Data to a Range on a Worksheet ",
"Use Automation to Transfer an ADO Recordset to a Worksheet Range ",
"Use Automation to Create a QueryTable on a Worksheet",
"Use the Clipboard",
"Create a Delimited Text File that Excel Can Parse into Rows and Columns",
"Transfer Data to a Worksheet Using ADO.NET "});
comboBox1.SelectedIndex = 0;
button1.Text = "Go!";
}
private void button1_Click(object sender, System.EventArgs e)
{
switch (comboBox1.SelectedIndex)
{
case 0 : Automation_CellByCell(); break;
case 1 : Automation_UseArray(); break;
case 2 : Automation_ADORecordset(); break;
case 3 : Automation_QueryTable(); break;
case 4 : Use_Clipboard(); break;
case 5 : Create_TextFile(); break;
case 6 : Use_ADONET(); break;
}
//Clean-up
m_objFont = null;
m_objRange = null;
m_objSheet = null;
m_objSheets = null;
m_objBooks = null;
m_objBook = null;
m_objExcel = null;
GC.Collect();
}
private void Automation_CellByCell()
{
// Start a new workbook in Excel.
m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
// Add data to cells of the first worksheet in the new workbook.
m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
m_objRange = m_objSheet.get_Range("A1", m_objOpt);
m_objRange.set_Value(m_objOpt,"Last Name");
m_objRange = m_objSheet.get_Range("B1", m_objOpt);
m_objRange.set_Value(m_objOpt,"First Name");
m_objRange = m_objSheet.get_Range("A2", m_objOpt);
m_objRange.set_Value(m_objOpt,"Doe");
m_objRange = m_objSheet.get_Range("B2", m_objOpt);
m_objRange.set_Value(m_objOpt,"John");
// Apply bold to cells A1:B1.
m_objRange = m_objSheet.get_Range("A1", "B1");
m_objFont = m_objRange.Font;
m_objFont.Bold=true;
// Save the workbook and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book1.xls", m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange,
m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();
}
private void Automation_UseArray()
{
// Start a new workbook in Excel.
m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
// Create an array for the headers and add it to cells A1:C1.
object[] objHeaders = {"Order ID", "Amount", "Tax"};
m_objRange = m_objSheet.get_Range("A1", "C1");
m_objRange.set_Value(m_objOpt,objHeaders);
m_objFont = m_objRange.Font;
m_objFont.Bold=true;
// Create an array with 3 columns and 100 rows and add it to
// the worksheet starting at cell A2.
object[,] objData = new Object[100,3];
Random rdm = new Random((int)DateTime.Now.Ticks);
double nOrderAmt, nTax;
for(int r=0;r<100;r++)
{
objData[r,0] = "ORD" + r.ToString("0000");
nOrderAmt = rdm.Next(1000);
objData[r,1] = nOrderAmt.ToString("c");
nTax = nOrderAmt*0.07;
objData[r,2] = nTax.ToString("c");
}
m_objRange = m_objSheet.get_Range("A2", m_objOpt);
m_objRange = m_objRange.get_Resize(100,3);
m_objRange.set_Value(m_objOpt,"objData");
// Save the workbook and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book2.xls", m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange,
m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();
}
private void Automation_ADORecordset()
{
// Create a Recordset from all the records in the Orders table.
ADODB.Connection objConn = new ADODB.Connection();
ADODB._Recordset objRS = null;
objConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
m_strNorthwind + ";", "", "", 0);
objConn.CursorLocation = ADODB.CursorLocationEnum.adUseClient;
object objRecAff;
objRS = (ADODB._Recordset)objConn.Execute("Orders", out objRecAff,
(int)ADODB.CommandTypeEnum.adCmdTable);
// Start a new workbook in Excel.
m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
// Get the Fields collection from the recordset and determine
// the number of fields (or columns).
System.Collections.IEnumerator objFields = objRS.Fields.GetEnumerator();
int nFields = objRS.Fields.Count;
// Create an array for the headers and add it to the
// worksheet starting at cell A1.
object[] objHeaders = new object[nFields];
ADODB.Field objField = null;
for(int n=0;n<nFields;n++)
{
objFields.MoveNext();
objField = (ADODB.Field)objFields.Current;
objHeaders[n] = objField.Name;
}
m_objRange = m_objSheet.get_Range("A1", m_objOpt);
m_objRange = m_objRange.get_Resize(1, nFields);
m_objRange.set_Value(m_objOpt,objHeaders);
m_objFont = m_objRange.Font;
m_objFont.Bold=true;
// Transfer the recordset to the worksheet starting at cell A2.
m_objRange = m_objSheet.get_Range("A2", m_objOpt);
m_objRange.CopyFromRecordset(objRS, m_objOpt, m_objOpt);
// Save the workbook and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book3.xls", m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange,
m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();
//Close the recordset and connection
objRS.Close();
objConn.Close();
}
private void Automation_QueryTable()
{
// Start a new workbook in Excel.
m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
// Create a QueryTable that starts at cell A1.
m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
m_objRange = m_objSheet.get_Range("A1", m_objOpt);
m_objQryTables = m_objSheet.QueryTables;
m_objQryTable = (Excel._QueryTable)m_objQryTables.Add(
"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
m_strNorthwind + ";", m_objRange, "Select * From Orders");
m_objQryTable.RefreshStyle = Excel.XlCellInsertionMode.xlInsertEntireRows;
m_objQryTable.Refresh(false);
// Save the workbook and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book4.xls", m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();
}
private void Use_Clipboard()
{
// Copy a string to the clipboard.
string sData = "FirstName\tLastName\tBirthdate\r\n" +
"Bill\tBrown\t2/5/85\r\n" +
"Joe\tThomas\t1/1/91";
System.Windows.Forms.Clipboard.SetDataObject(sData);
// Start a new workbook in Excel.
m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
// Paste the data starting at cell A1.
m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
m_objRange = m_objSheet.get_Range("A1", m_objOpt);
m_objSheet.Paste(m_objRange, false);
// Save the workbook and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book5.xls", m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();
}
private void Create_TextFile()
{
// Connect to the data source.
System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_strNorthwind + ";");
objConn.Open();
// Execute a command to retrieve all records from the Employees table.
System.Data.OleDb.OleDbCommand objCmd = new System.Data.OleDb.OleDbCommand(
"Select * From Employees", objConn);
System.Data.OleDb.OleDbDataReader objReader;
objReader = objCmd.ExecuteReader();
// Create the FileStream and StreamWriter object to write
// the recordset contents to file.
System.IO.FileStream fs = new System.IO.FileStream(
m_strSampleFolder + "Book6.txt", System.IO.FileMode.Create);
System.IO.StreamWriter sw = new System.IO.StreamWriter(
fs, System.Text.Encoding.Unicode);
// Write the field names (headers) as the first line in the text file.
sw.WriteLine(objReader.GetName(0) + "\t" + objReader.GetName(1) +
"\t" + objReader.GetName(2) + "\t" + objReader.GetName(3) +
"\t" + objReader.GetName(4) + "\t" + objReader.GetName(5));
// Write the first six columns in the recordset to a text file as
// tab-delimited.
while(objReader.Read())
{
for(int i=0;i<=5;i++)
{
if(!objReader.IsDBNull(i))
{
string s;
s = objReader.GetDataTypeName(i);
if(objReader.GetDataTypeName(i)=="DBTYPE_I4")
{
sw.Write(objReader.GetInt32(i).ToString());
}
else if(objReader.GetDataTypeName(i)=="DBTYPE_DATE")
{
sw.Write(objReader.GetDateTime(i).ToString("d"));
}
else if (objReader.GetDataTypeName(i)=="DBTYPE_WVARCHAR")
{
sw.Write(objReader.GetString(i));
}
}
if(i<5) sw.Write("\t");
}
sw.WriteLine();
}
sw.Flush(); // Write the buffered data to the FileStream.
// Close the FileStream.
fs.Close();
// Close the reader and the connection.
objReader.Close();
objConn.Close();
// ==================================================================
// Optionally, automate Excel to open the text file and save it in the
// Excel workbook format.
// Open the text file in Excel.
m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBooks.OpenText(m_strSampleFolder + "Book6.txt", Excel.XlPlatform.xlWindows, 1,
Excel.XlTextParsingType.xlDelimited, Excel.XlTextQualifier.xlTextQualifierDoubleQuote,
false, true, false, false, false, false, m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
m_objBook = m_objExcel.ActiveWorkbook;
// Save the text file in the typical workbook format and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book6.xls", Excel.XlFileFormat.xlWorkbookNormal,
m_objOpt, m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();
}
private void Use_ADONET()
{
// Establish a connection to the data source.
System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_strSampleFolder +
"Book7.xls;Extended Properties=Excel 8.0;");
objConn.Open();
// Add two records to the table named 'MyTable'.
System.Data.OleDb.OleDbCommand objCmd = new System.Data.OleDb.OleDbCommand();
objCmd.Connection = objConn;
objCmd.CommandText = "Insert into MyTable (FirstName, LastName)" +
" values ('Bill', 'Brown')";
objCmd.ExecuteNonQuery();
objCmd.CommandText = "Insert into MyTable (FirstName, LastName)" +
" values ('Joe', 'Thomas')";
objCmd.ExecuteNonQuery();
// Close the connection.
objConn.Close();
}
} // End Class
}// End namespace
Visual Studio 2005'te kodunu değiştirmeniz gerekir unutmayın. Windows Forms bir proje oluşturduğunuzda, varsayılan olarak, Visual C# bir form projeye ekler. Form1 form olarak adlandırılır. Form temsil eden iki dosya Form1.cs ve Form1.designer.cs olarak adlandırılır. Kodu, Form1.cs içinde yazın. Form1.designer.cs denetimleri araç Kutusu'ndan bırakarak gerçekleştirilen tüm eylemleri uygulayan kodu burada Windows Form Designer yazar dosyadır.
Visual C# 2005'te Windows Forms Tasarımcısı hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:
Not Varsayılan klasöre (C:\Program Files\Microsoft Office) Office'i yüklemek, m_strNorthwind sabit kod örneğinde, yükleme yolu için Northwind.mdb eşleşecek şekilde değiştirin.
Form1.cs içinde kullanma yönergeleri için aşağıdakini ekleyin:
using System.Reflection;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;
Oluşturmak ve örnek çalıştırmak için F5 tuşuna basın.
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:306023
(http://support.microsoft.com/kb/306023/en-us/
)
Bu makaleyi kullanmak için ne kadar kişisel çaba harcadınız?
Çok az
Az
Orta
Fazla
Çok fazla
Bu bilgiyi geliştirmemiz için nedenleri ve bu konuda neler yapabileceğimizi paylaşın
Teşekkürler! Görüşleriniz, destek içeriğimizi geliştirmemize yardımcı olmak için kullanılmaktadır. Diğer yardım seçenekleri için, lütfen Yardım ve Destek Giriş Sayfasını ziyaret edin.