繁体   English   中英

使用来自SQL数据库的Excel互操作类创建Excel文件

[英]Create an Excel file with the Excel interop class from SQL Database

我想用SQL数据库中的Excel互操作类创建一个Excel文件。 通过SQL查询,我之前已将数据集转移到dataGridview中。 查询的结果是数据。 但是,我无法将此数据从SQL数据库打印到具有数据集的Excel单元格。

private void linkLabel10_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
    using (var fbd = new FolderBrowserDialog())
    {
        DialogResult result = fbd.ShowDialog();

        if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(fbd.SelectedPath))
        {
            string fileTest = fbd.SelectedPath.ToString() + "\\"+ comboBox1.Text.Substring(0, comboBox1.Text.IndexOf("*") - 1) +"-"+ comboBox2.Text.Substring(0, comboBox2.Text.IndexOf("(") - 1) +"-"+ comboBox2.Text.Substring(comboBox2.Text.IndexOf("(") + 1, 10) + ".xlsx";
            MessageBox.Show(fileTest);
            if (File.Exists(fileTest))
            {
                File.Delete(fileTest);
            }

            SqlDataAdapter da = new SqlDataAdapter("select PersonelKodu= ztSinifEgitimiDurum.KisiID, İsim= dbo.cdCurrAcc.FullName, Katılım = CASE WHEN Katilim = 1 THEN 'Katıldı' ELSE 'Katılmadı' END, ztSinifEgitimiDurum.ID FROM dbo.ztSinifEgitimiDurum INNER JOIN dbo.cdCurrAcc ON cdCurrAcc.CurrAccCode = ztSinifEgitimiDurum.KisiID AND cdCurrAcc.CurrAccTypeCode = ztSinifEgitimiDurum.KisiTipiID WHERE AtamaID =" + AtamaIDBul(), baglan);
            DataSet ds = new DataSet();

            Excel.Application Excel;
            Excel.Worksheet excelWorkSheet;
            Excel.Workbook excelWorkBook;

            Excel = new Excel.Application();
            excelWorkBook = Excel.Workbooks.Add();
            excelWorkSheet = (Excel.Worksheet)excelWorkBook.Worksheets.get_Item(1);
            excelWorkSheet.Cells[1, 1] = "some value";
            excelWorkSheet.Name = "Ali";

            foreach (DataTable table in ds.Tables)
                {
                    for (int i = 1; i < table.Columns.Count + 1; i++)
                    {
                        excelWorkSheet.Cells[1, i] = table.Columns[i - 1].ColumnName;
                    MessageBox.Show(table.Columns[i - 1].ColumnName.ToString());
                    }

                    for (int j = 0; j < table.Rows.Count; j++)
                    {
                        for (int k = 0; k < table.Columns.Count; k++)
                        {
                            excelWorkSheet.Cells[j + 2, k + 1] = table.Rows[j].ItemArray[k].ToString();
                        }
                    }
                }

            //                   excelWorkSheet.Cells[1, 1] = "some value";

            excelWorkBook.SaveAs(fileTest);
            excelWorkBook.Close();
            Excel.Quit();

        }
    }
}

您忘记填写数据集,请添加以下行da.Fill(ds); DataSet ds = new DataSet();

您可以尝试使用以下代码用表中的值填充工作表:

  ws.Activate();
  foreach (DataTable dt in ds.Tables)
  {
            // Add column headers from the datatable 
            for (int Idx = 0; Idx < dt.Columns.Count; Idx++)
            {
                ws.Range["A1"].Offset[0, Idx].Value = dt.Columns[Idx].ColumnName;
            }

            // add data rows 
            for (int Idx = 0; Idx < dt.Rows.Count; Idx++)
            {  // hey I did not invent this line of code, I found it somewhere on CodeProject. 
                // It works to add the whole row at once 
                ws.Range["A2"].Offset[Idx].Resize[1, dt.Columns.Count].Value = dt.Rows[Idx].ItemArray;
            }
  ...

但是,如果您的数据集中有多个表,则必须为单个表添加更多工作表。

它基于本文

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM