【问题标题】:Export a table from SQL Server 2008 Database to excel using c#使用c#将表从SQL Server 2008数据库导出到excel
【发布时间】:2014-11-05 18:10:21
【问题描述】:

我想将一个表从 SQL Server 2008 数据库导出到 Excel 工作表,其约束条件与数据库架构中的相同。 例如,如果在数据库中,列的数据类型为 integer 或 varchar 那么在 Excel 工作表中,它应该具有相同的数据类型,并且如果有人试图在列中输入无效数据,则应该在 Excel 工作表本身中显示一条错误消息。

我找到了一个代码脚本here,但它没有实现约束。

【问题讨论】:

  • 这听起来像是个大工程……
  • Excel 除了以特定方式格式化单元格/列之外,没有数据类型的概念。您可以尝试创建一个脚本,尝试将输入与格式匹配,如果不匹配,则使单元格变为红色。或删除内容或任何看起来正确的内容

标签: c# asp.net sql-server export-to-excel


【解决方案1】:

查看EPPlus,它能够将数据表转换为 XLSX,并且您可以对列应用数据验证以模仿 Excel 中的“数据类型”。

【讨论】:

    【解决方案2】:

    //这是我用于sql server to Excel database Dump的代码 //试试看

    private void button1_Click_2(object sender, EventArgs e)
    {
        DataSet DtSetmatch = new DataSet();
        SQL.DataTable dttt = new SQL.DataTable();
        string selectedTable = cmbImportItemList.Text;
        using (SqlDataAdapter adater = new SqlDataAdapter("Select * from "+selectedTable, new SqlConnection(Properties.Settings.Default.connectionstring2)))
        {
            adater.Fill(dttt);
        }          
        Excel.Application oXL;
        Excel._Workbook oWB;
        Excel._Worksheet oSheet;
        oXL = new Excel.Application();
        oXL.Visible = true;            
        oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value));
        oSheet = (Excel._Worksheet)oWB.ActiveSheet;
        SQL.DataTable dtCategories = dttt.DefaultView.ToTable(true,dttt.Columns[0].ToString());
    
        foreach (SQL.DataRow category in dtCategories.Rows)
        {
            oSheet = (Excel._Worksheet)oXL.Worksheets.Add();
            oSheet.Name = category[0].ToString()
                .Replace(" ", "")
                .Replace("  ", "")
                .Replace("/", "")
                .Replace("\\", "")
                .Replace("*", "");                    
            string[] colNames = new string[dttt.Columns.Count];
            int col = 0;
            try
            {
                foreach (SQL.DataColumn dc in dttt.Columns) colNames[col++] = dc.ColumnName;////dc.ColumnName;
                char lastColumn = (char)(65 + dttt.Columns.Count - 1);
                oSheet.get_Range("A1", lastColumn + "1").Value2 = colNames;
                oSheet.get_Range("A1", lastColumn + "1").Font.Bold = true;
                oSheet.get_Range("A1", lastColumn + "1").VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;                            
                SQL.DataRow[] dr = dttt.Select(string.Format(""));
                string[,] rowData = new string[dr.Count<SQL.DataRow>(), dttt.Columns.Count];                            
                int rowCnt = 0;
                int redRows = 2;
                foreach (SQL.DataRow row in dr)
                {                                
                    for (col = 0; col < dttt.Columns.Count; col++)
                    {
                        rowData[rowCnt, col] = row[col].ToString();                                   
                    }
                    redRows++;
                    rowCnt++;                             
                }                            
                oSheet.get_Range("A2", lastColumn + rowCnt.ToString()).Value2 = rowData;
                oXL.Visible = true;
                oXL.UserControl = true;
                try
                {
                    oWB.SaveAs("C://Products.xlsx", AccessMode: Excel.XlSaveAsAccessMode.xlShared);
                }
                catch
                {
                }
                break;
            }
            catch (Exception aee)
            {
            }
            break;
        }                                   
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-18
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 2013-09-13
      相关资源
      最近更新 更多