110,499
社区成员
发帖
与我相关
我的任务
分享
public static void ExportToExcel(System.Data.DataTable eDataTable, string[] headers)
{
Microsoft.Office.Interop.Excel.ApplicationClass ExcelApp;
ExcelApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
Microsoft.Office.Interop.Excel.Workbook ExcelBook = ExcelApp.Workbooks.Add(1);
Microsoft.Office.Interop.Excel.Worksheet ExcelSheet = (Microsoft.Office.Interop.Excel.Worksheet)ExcelBook.Worksheets[1];
ExcelApp.Visible = true;
//写列标题
for (int i = 0; i < eDataTable.Columns.Count; i++)
{
ExcelSheet.Cells[1, i + 1] = eDataTable.Columns[i].ColumnName;
}
//写值
for (int r = 0; r < eDataTable.Rows.Count; r++)
{
for (int i = 0; i < eDataTable.Columns.Count; i++)
{
ExcelSheet.Cells[r + 2, i + 1] = eDataTable.Rows[r][i].ToString();
}
}
GC.Collect();
}
/// <summary>
/// 将二维数组数据写入Excel文件(自动分页,并指定要合并的列索引)
/// </summary>
/// <param name="arr">二维数组</param>
/// <param name="rows">每个WorkSheet写入多少行数据</param>
/// <param name="top">行索引</param>
/// <param name="left">列索引</param>
/// <param name="mergeColumnIndex">数组的二维索引,相当于DataTable的列索引,索引从0开始</param>
public void ArrayToExcel(string[,] arr,int rows,int top,int left,int mergeColumnIndex)
{
int rowCount = arr.GetLength(0); //二维数组行数(一维长度)
int colCount = arr.GetLength(1); //二维数据列数(二维长度)
sheetCount = this.GetSheetCount(rowCount,rows); //WorkSheet个数
//复制sheetCount-1个WorkSheet对象
for(int i=1;i<sheetCount;i++)
{
workSheet = (Excel.Worksheet)workBook.Worksheets.get_Item(i);
workSheet.Copy(missing,workBook.Worksheets[i]);
}
//将二维数组数据写入Excel
for(int i=sheetCount;i>=1;i--)
{
int startRow = (i - 1) * rows; //记录起始行索引
int endRow = i * rows; //记录结束行索引
//若是最后一个WorkSheet,那么记录结束行索引为源DataTable行数
if(i == sheetCount)
endRow = rowCount;
//获取要写入数据的WorkSheet对象,并重命名
workSheet = (Excel.Worksheet)workBook.Worksheets.get_Item(i);
workSheet.Name = sheetPrefixName + "-" + i.ToString();
//将二维数组中的数据写入WorkSheet
for(int j=0;j<endRow-startRow;j++)
{
for(int k=0;k<colCount;k++)
{
workSheet.Cells[top + j,left + k] = arr[startRow + j,k];
}
}
//利用二维数组批量写入
int row = endRow-startRow;
string[,] ss = new string[row,colCount];
for(int j=0;j<row;j++)
{
for(int k=0;k<colCount;k++)
{
ss[j,k] = arr[startRow + j,k];
}
}
range = (Excel.Range)workSheet.Cells[top,left];
range = range.get_Resize(row,colCount);
range.Value = ss;
//合并相同行
this.MergeRows(workSheet,left+mergeColumnIndex,top,rows);
}
}
string fileName,filePath,strLine;
FileStream objFileStream;
StreamWriter objStreamWriter;
fileName = "NewFile.xls";
filePath = "c:\\"+fileName;
objFileStream = new FileStream(filePath,FileMode.Create,FileAccess.ReadWrite);
objStreamWriter = new StreamWriter(objFileStream,System.Text.Encoding.Default);
objStreamWriter.AutoFlush=true;
strLine = "第一列\t第二列\t第三列";
objStreamWriter.WriteLine(strLine);
strLine = "";
DataSet ds = new DataSet();
ds=....(查询出来的数据)
for(int j=0;j<=ds.Tables[0].Rows.Count-1;j++)
{
strLine += "\r";
for (int i = 0; i < ds.Tables[0].Columns.Count-1; i++)
{
strLine = strLine + ds.Tables[0].Rows[j][i].ToString()+"\t";
}
strLine += ds.Tables[0].Rows[j][ds.Tables[0].Columns.Count-1].ToString();
strLine = strLine.Trim();
objStreamWriter.WriteLine(strLine);
strLine="";
}
objStreamWriter.Flush();
objFileStream.Flush();
objStreamWriter.Close();
objFileStream.Close();