2015-06-09 83 views
1

我有一個WPF中的DataGrid,我想將信息導出到Excel電子表格。導出數據表

我是C#的新手,對如何做這個過程感到困惑。有沒有人有任何視覺例子來幫助我?

回答

0

的XAML是:

<Window x:Class="ReadExcel_And_BindToDataGrid.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="490" Width="900" WindowStartupLocation="CenterScreen" WindowStyle="None" ResizeMode="NoResize"> 
    <Grid> 
     <Border BorderBrush="Black" BorderThickness="5"> 
      <StackPanel HorizontalAlignment="Center"> 
       <Border BorderBrush="Black" BorderThickness="0,0,0,5" Height="60" HorizontalAlignment="Center" VerticalAlignment="Center" Width="890"> 
        <WrapPanel HorizontalAlignment="Left" VerticalAlignment="Center"> 
         <TextBox Height="30" Name="txtFilePath" Width="550" Margin="10,0,10,0" FontSize="15" Opacity="1" /> 
         <Button Content="Browse Excel" Name="btnOpen" Width="120" FontSize="15" Height="30" FontWeight="Bold" Click="btnOpen_Click" /> 
         <Button Content="Close" FontSize="15" Height="30" FontWeight="Bold" Name="btnClose" Width="75" Margin="110,0,0,0" Background="#FFEFE5E5" Click="btnClose_Click" /> 
        </WrapPanel> 
       </Border> 
       <Label Name="txtIns" Content="View Uploaded records to DataGridView" FontSize="15" FontWeight="Bold" Margin="15" HorizontalAlignment="Center" /> 
       <DataGrid AutoGenerateColumns="True" IsReadOnly="True" HorizontalAlignment="Center" Name="dtGrid" VerticalAlignment="Center" /> 
      </StackPanel> 
     </Border> 
    </Grid> 
</Window> 

後面的代碼是:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void btnOpen_Click(object sender, RoutedEventArgs e) 
    { 
     OpenFileDialog openfile = new OpenFileDialog(); 
     openfile.DefaultExt = ".xlsx"; 
     openfile.Filter = "(.xlsx)|*.xlsx"; 
     //openfile.ShowDialog(); 

     var browsefile = openfile.ShowDialog(); 

     if (browsefile == true) 
     { 
      txtFilePath.Text = openfile.FileName; 

      Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); 
      //Static File From Base Path........... 
      //Microsoft.Office.Interop.Excel.Workbook excelBook = excelApp.Workbooks.Open(AppDomain.CurrentDomain.BaseDirectory + "TestExcel.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
      //Dynamic File Using Uploader........... 
      Microsoft.Office.Interop.Excel.Workbook excelBook = excelApp.Workbooks.Open(txtFilePath.Text.ToString(), 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
      Microsoft.Office.Interop.Excel.Worksheet excelSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelBook.Worksheets.get_Item(1); ; 
      Microsoft.Office.Interop.Excel.Range excelRange = excelSheet.UsedRange; 

      string strCellData = ""; 
      double douCellData; 
      int rowCnt = 0; 
      int colCnt = 0; 

      DataTable dt = new DataTable(); 
      for (colCnt = 1; colCnt <= excelRange.Columns.Count; colCnt++) 
      { 
       string strColumn = ""; 
       strColumn = (string)(excelRange.Cells[1, colCnt] as Microsoft.Office.Interop.Excel.Range).Value2; 
       dt.Columns.Add(strColumn, typeof(string)); 
      } 

      for (rowCnt = 2; rowCnt <= excelRange.Rows.Count; rowCnt++) 
      { 
       string strData = ""; 
       for (colCnt = 1; colCnt <= excelRange.Columns.Count; colCnt++) 
       { 
        try 
        { 
         strCellData = (string)(excelRange.Cells[rowCnt, colCnt] as Microsoft.Office.Interop.Excel.Range).Value2; 
         strData += strCellData + "|"; 
        } 
        catch (Exception ex) 
        { 
         douCellData = (excelRange.Cells[rowCnt, colCnt] as Microsoft.Office.Interop.Excel.Range).Value2; 
         strData += douCellData.ToString() + "|"; 
        } 
       } 
       strData = strData.Remove(strData.Length - 1, 1); 
       dt.Rows.Add(strData.Split('|')); 
      } 

      dtGrid.ItemsSource = dt.DefaultView; 

      excelBook.Close(true, null, null); 
      excelApp.Quit(); 
     } 
    } 

    private void btnClose_Click(object sender, RoutedEventArgs e) 
    { 
     this.Close(); 
    } 
}