ورود

View Full Version : حرفه ای: خروجی اکسل از دیتا گرید در C#‎ wpf



saeed_homayoni
سه شنبه 18 مهر 1396, 14:17 عصر
سلام از کد زیر برای خروجی اکسل گرفتن از دیتا گرید در wpf استفاده کردم ولی به سطر 11 از جدول که میرسه خطا میده می گه نوع مشکل داره و ... در صورتی که همه اش متن هست و با حذف رکورد 11 باز هم به سطر جدید گیر میده
private void btnExcel_Click(object sender, RoutedEventArgs e)
{

if (dataGrid.Items.Count < 1)
{
MessageBox.Show("اطلاعاتی برای خروجی گرفتن وجود ندارد");
}

else
{
dataGrid.SelectedIndex = 0;
dataGrid.SelectedItem = dataGrid.SelectedItems[0];
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
Excel.Range rangeToHoldHyperlink;
Excel.Range CellInstance;
xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Add(misValue);

xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1) ;
xlApp.DisplayAlerts = false;
//Dummy initialisation to prevent errors.
rangeToHoldHyperlink = xlWorkSheet.get_Range("A1", Type.Missing);
CellInstance = xlWorkSheet.get_Range("A1", Type.Missing);

for (int i = 1; i < dataGrid.Columns.Count + 1; i++)
{
xlWorkSheet.Cells[1, i] = i.ToString() ;
xlWorkSheet.Cells[2, i] = dataGrid.Columns[i - 1].Header.ToString();
}
dataGrid.SelectedItem = dataGrid.Items[0];
string cell="";
for (int i = 0; i < dataGrid.Items.Count - 1; i++)
{
for (int j = 0; j < dataGrid.Columns.Count; j++)

{
object item = new object();
item= dataGrid.Items[i];
//MessageBox.Show("I="+i.ToString()+"J="+j.ToString(), (dataGrid.SelectedCells[j].Column.GetCellContent(item) as TextBlock).Text);
cell = (dataGrid.SelectedCells[j].Column.GetCellContent(item) as TextBlock).Text;


try
{
xlWorkSheet.Cells[i + 3, j + 1] = cell;
}
catch { MessageBox.Show("I=" + i.ToString() + "J=" + j.ToString(),cell); }
}

}

SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Excel Document(*.xlsx)|*.xlsx";
sfd.FileName = "";
if (sfd.ShowDialog() == true)
{
xlWorkBook.SaveAs(sfd.FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode. xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
}
xlApp.Quit();

}

}