EPPlus İle Makrolu Excel Oluşturma | C#

Merhaba, excel işlemlerinde EPPlus kullanıyorum.
Her ihtiyacımı görüyor sağolsun.
Geçenlerde de, içerisinde makro barındıran bir excele ihtiyacım oldu.
Baktım ona da destekleri varmış.
Bir kez daha takdir ettim.

Excel oluşturduğum metodu tümüyle paylaşıyorum.

Makro eklediğim kısım en altta.

public static byte[] OlusturExcel<T>(IEnumerable<T> liste, string calismaSayfasiAdi)
{
	byte[] sonuc;
	using (ExcelPackage pck = new ExcelPackage())
	{
		var ws = pck.Workbook.Worksheets.Add(calismaSayfasiAdi);
		// Once basliklari yazalim.
		IList<PropertyInfo> properties = typeof(T).GetProperties().ToList();
		int kolonSayac = 1;
		int satirSayac = 1;
		foreach (PropertyInfo prop in properties)
		{
			string baslik = prop.Name;
			ws.Cells[satirSayac, kolonSayac].Value = baslik;
			ws.Cells[satirSayac, kolonSayac].Style.Font.Bold = true;
			ws.Cells[satirSayac, kolonSayac].Style.Font.Name = "Tahoma";
			ws.Cells[satirSayac, kolonSayac].Style.Font.Size = 10;
			ws.Cells[satirSayac, kolonSayac].Style.Fill.PatternType = ExcelFillStyle.Solid;
			ws.Cells[satirSayac, kolonSayac].Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.AliceBlue);
			kolonSayac++;
		}
		// Sonra iceriklere gecelim.
		satirSayac = 2;
		foreach (T item in liste)
		{
			kolonSayac = 1;
			foreach (PropertyInfo prop in properties)
			{
				object propValue = prop.GetValue(item, null);
				if (propValue == null)
				{
					ws.Cells[satirSayac, kolonSayac].Value = "";
				}
				else
				{
					TypeCode typeCode = Type.GetTypeCode(prop.PropertyType);
					switch (typeCode)
					{
						case TypeCode.Int32:
							ws.Cells[satirSayac, kolonSayac].Value = Convert.ToInt32(propValue.ToString().Replace(".", ","), CultureInfo.GetCultureInfo("tr-TR"));
							break;
						case TypeCode.Decimal:
							ws.Cells[satirSayac, kolonSayac].Value = Convert.ToDecimal(propValue.ToString().Replace(".", ","), CultureInfo.GetCultureInfo("tr-TR"));
							break;
						default:
							ws.Cells[satirSayac, kolonSayac].Value = propValue.ToString().Trim();
							break;
					}
				}
				ws.Cells[satirSayac, kolonSayac].Style.Font.Name = "Tahoma";
				ws.Cells[satirSayac, kolonSayac].Style.Font.Size = 9;
				kolonSayac++;
			}
			satirSayac++;
		}
		ws.DefaultRowHeight = 25;
		ws.Cells.AutoFitColumns();				
		// Makro ekledigim kisim iste burasi...
		pck.Workbook.CreateVBAProject(); 
		pck.Workbook.CodeModule.Name = "Module1";
		StringBuilder bfrMakroKod = new StringBuilder();
		bfrMakroKod.Append(@"Function ZamkinosEPPlusTest() As Boolean");
		bfrMakroKod.Append(Environment.NewLine);
		bfrMakroKod.Append(@"    MsgBox ""Zamkinos test!""");				
		bfrMakroKod.Append(Environment.NewLine);
		bfrMakroKod.Append(@"    ZamkinosEPPlusTest = False");				
		bfrMakroKod.Append(Environment.NewLine);
		bfrMakroKod.Append(@"End Function");
		bfrMakroKod.Append(Environment.NewLine);
		pck.Workbook.CodeModule.Code = bfrMakroKod.ToString();
		sonuc = pck.GetAsByteArray();
	}
	return sonuc;
}

Selamlar.

Leave a Reply

Your email address will not be published. Required fields are marked *