2015-11-10 4 views
1

У меня есть Form, который содержит количество элементов управления TextBox и DataGridView. Я хочу экспортировать данные из этой формы в файл excel. Я использую этот код, он отлично работает для DataGridView, но я не знаю, как экспортировать данные TextBox.Экспорт данных из Windows Forms DataGridView и TextBox в Excel

private void copyAlltoClipboard() 
{ 
    dataGridView1.SelectAll(); 
    DataObject dataObj = dataGridView1.GetClipboardContent(); 
    if (dataObj != null) 
     Clipboard.SetDataObject(dataObj); 
} 
try 
{ 
    copyAlltoClipboard(); 
    Microsoft.Office.Interop.Excel.Application xlexcel; 
    Microsoft.Office.Interop.Excel.Workbook xlWorkBook 
    Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; 
    object misValue = System.Reflection.Missing.Value; 
    xlexcel = new Microsoft.Office.Interop.Excel.Application(); 
    xlexcel.Visible = true; 
    xlWorkBook = xlexcel.Workbooks.Add(misValue) 
    xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 
    Microsoft.Office.Interop.Excel.Range CR = (Microsoft.Office.Interop.Excel.Range)xlWorkSheet.Cells[1, 1]; 
    CR.Select(); 

    xlWorkSheet.PasteSpecial(CR, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true);    
} 
catch (Exception ee) 
{ 
    MessageBox.Show(ee.Message); 
} 
+1

EPPlus является лучшим выбором: HTTPS : //www.nuget.org/packages/EPPlus/ – ernest

+1

Необходимо добавить фрагменты кода и то, что вы пытались до сих пор. – KPrince36

+0

Вы можете увидеть код, который я использую – Regash

ответ

0

Вы можете экспортировать значение вашего Labels и TextBoxes один за другим таким образом:

//Put Text of Label in Cell[1,1] 
sheet.Cells[1, 1].Value = this.label1.Text; 

//Put the Text of TextBox in Cell[1,2] 
sheet.Cells[1, 2].Value = this.textBox1.Text; 

Затем поместите содержание других Labels и TextBoxes и наконец вставить DataGridViewContents в подходящем месте.

Чтобы сохранить имена короче использование using XL = Microsoft.Office.Interop.Excel;

Вот код

private void CopyGridToClipboard(DataGridView grid) 
{ 
    //Exclude row headers 
    grid.RowHeadersVisible = false; 

    //Include column headers 
    grid.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText; 
    grid.SelectAll(); 
    DataObject dataObj = grid.GetClipboardContent(); 
    if (dataObj != null) 
     Clipboard.SetDataObject(dataObj); 

    //Set the visibility of row headers back 
    grid.RowHeadersVisible = true; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    //Copy grid to clipboard 
    this.CopyGridToClipboard(dataGridView1); 

    //Open the excel application and add a workbook 
    XL.Application application; 
    XL.Workbook book; 
    XL.Worksheet sheet; 
    application = new XL.Application(); 
    application.Visible = true; 
    book = application.Workbooks.Add(); 
    sheet = (XL.Worksheet)book.Worksheets[1]; 

    //label1 Text in Cell[1,1] 
    ((XL.Range)sheet.Cells[1, 1]).Value = this.label1.Text; 

    //textBox1 Text in Cell[1,2] 
    ((XL.Range)sheet.Cells[1, 2]).Value = this.textBox1.Text; 

    //label2 Text in Cell[2,1] 
    ((XL.Range)sheet.Cells[2, 1]).Value = this.label2.Text; 

    //textBox2 Text in Cell[2,2] 
    ((XL.Range)sheet.Cells[2, 2]).Value = this.textBox2.Text; 

    //Let row 3 empty 
    //Paste grid into Cell[4,1] 
    XL.Range gridRange = (XL.Range)sheet.Cells[4, 1]; 
    gridRange.Select(); 
    sheet.PasteSpecial(gridRange); 
} 

Вот скриншот приложения

enter image description here

И ч ERE скриншот первенствует

enter image description here

Примечание

Вы также можете добавить форматирование ячеек и диапазонов в конце метода:

sheet.Cells[1, 1].Font.Bold = true; 
sheet.Cells[1, 1].Interior.Color = 
    System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Silver); 

sheet.Cells[2, 1].Font.Bold = true; 
sheet.Cells[2, 1].Interior.Color = 
    System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Silver); 

sheet.Range[sheet.Cells[4, 1], 
      sheet.Cells[4, dataGridView1.ColumnCount]].Font.Bold = true; 
sheet.Range[sheet.Cells[4, 1], 
      sheet.Cells[4, dataGridView1.ColumnCount]].Interior.Color = 
    System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Silver); 
Смежные вопросы