如何在Excel中将数据保存到1张表

时间:2015-08-29 05:37:29

标签: c# excel

我创建了1个类来创建函数排列PermutationsClass

我希望将它保存为excel中的1张。

使用参数加载并保存到Excel的类是:

        public void ExcelSave(string e_path, string e_table, DataTable dt)
        {
            // some code here
        }

        public DataTable ExcelLoad(string e_path,string e_table)
        {
            some code here
        }

我试过了:

    string noicap = "";
    int length= 0;
    string id= "";
    private void ThreadProcCMND()
    {
        dtCheck = ExcelLoad(fileExcel, "Sheet1");

        fileExcel = Application.StartupPath.ToString() + @"\Data_INFO.xls";
        foreach (DataRow ro in dtCheck .Rows)
        {
            if (ro[0].ToString().Trim() != "")
            {
                if (r["id"].ToString().Trim().Substring(0, ro[0].ToString().Trim().Length) == ro[0].ToString().Trim())
                {
                    length = ro[0].ToString().Trim().Length;
                    noicap = ro[1].ToString().Trim();
                    break;
                }
            }
        }
        int sodao = int.Parse(m_LoginInfos.GetValueByKey("vina_d").ToString());
        permutation = PermutationsClass(r["id"].ToString().Trim(), lenght, sodao);

        ExcelSave(fileExcel, "CMND Tỉnh", dtMaCMND);
    }

在按钮btnGenerateRandomPermutations中,我将课程ThreadProcCMND放在此处,但无效。

1 个答案:

答案 0 :(得分:0)

public void exportDtToExcel(string excelPath, string StrSheetName,DataTable dt)
{
    try
    {
        int ColumnCount;
        if (dt == null || (ColumnCount = dt.Columns.Count) == 0)
        {
            throw new Exception("Null or empty input table!\n");
        }

        Microsoft.Office.Interop.Excel.Application Excel = new Microsoft.Office.Interop.Excel.Application();
        Excel.Workbooks.Add();

        Microsoft.Office.Interop.Excel._Worksheet Worksheet = Excel.ActiveSheet;

        object[] Header = new object[ColumnCount];                           
        for (int i = 0; i < ColumnCount; i++)
        {
            Header[i] = dt.Columns[i].ColumnName;
        }
        Microsoft.Office.Interop.Excel.Range HeaderRange = Worksheet.get_Range((Microsoft.Office.Interop.Excel.Range)(Worksheet.Cells[1, 1]), (Microsoft.Office.Interop.Excel.Range)(Worksheet.Cells[1, ColumnCount]));
        HeaderRange.Value = Header;
        DataTable tempdtsheet;
        Worksheet = Excel.Worksheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value);                
        {
            Worksheet.Name = StrSheetName;
            tempdtsheet = dt;
            Worksheet.Activate();
        }              
        Excel.Range cells = Worksheet.Cells;
        try
        {              
            for (int i1 = 0; i1 < ColumnCount; i1++)
                Header[i1] = tempdtsheet.Columns[i1].ColumnName;
            Microsoft.Office.Interop.Excel.Range HeaderRange1 = Worksheet.get_Range((Microsoft.Office.Interop.Excel.Range)(Worksheet.Cells[1, 1]), (Microsoft.Office.Interop.Excel.Range)(Worksheet.Cells[1, ColumnCount]));
            HeaderRange1.Value = Header;
            int RowsCount1 = tempdtsheet.Rows.Count;
            object[,] Cells1 = new object[RowsCount1, ColumnCount];

            for (int j = 0; j < RowsCount1; j++)
                for (int i1 = 0; i1 < ColumnCount; i1++)
                {
                    Cells1[j, i1] = tempdtsheet.Rows[j][i1];
                }
            Worksheet.get_Range((Microsoft.Office.Interop.Excel.Range)(Worksheet.Cells[2, 1]), (Microsoft.Office.Interop.Excel.Range)(Worksheet.Cells[RowsCount1 + 1, ColumnCount])).Value = Cells1;
            Worksheet.Columns.AutoFit();
            ////deleting other sheets as excel is created with sheet 1,2 and 3 
            ((Microsoft.Office.Interop.Excel.Worksheet)Excel.Worksheets["Sheet3"]).Delete();
            ((Microsoft.Office.Interop.Excel.Worksheet)Excel.Worksheets["Sheet2"]).Delete();
            ((Microsoft.Office.Interop.Excel.Worksheet)Excel.Worksheets["Sheet1"]).Delete();

        }
        catch (Exception e1)
        {
            MessageBox.Show("Error" + e1.Message, "Error!!!");
        }

        if (excelPath != null && excelPath != "")
        {
            try
            {
                Worksheet.SaveAs(excelPath);
                Excel.Quit();
                MessageBox.Show("Output file is saved");
                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
            }
            catch (Exception ex)
            {
                throw new Exception("Problem with File path." + ex.Message);
            }
            finally
            {
                Marshal.ReleaseComObject(Worksheet);
                Marshal.ReleaseComObject(Excel);
                Worksheet = null;
            }
        }
        else
        {
            Excel.Visible = true;
        }
    }
    catch (Exception exc)
    {
        throw new Exception("Error in Exporting : " + exc.Message);
    }
}

导出到excel时要注意的是在使用互操作时释放所有资源而不使用double dot notation。如果您想以简单的方式进行,那么您可以通过EPPlus导出xlsx文件或ExcelLibrary for xls文件。有关限制的快速参考,您可以see this