我创建了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
放在此处,但无效。
答案 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