导出Excel文件(二)

2014-11-24 01:22:40 · 作者: · 浏览: 1
);//取数据集中第几张表
string fieldName = strList[1].ToString();//取表中的字段名
bool isList = strList[2].ToString().ToUpper() == "T";//判断是否是多行记录
if( isList ){//如果是多行记录
DataTable tbl = dataList[ dataIndex ] as DataTable;//把符合条件的转换成datatable类型
//复制单元格格式
for ( int i = 0; i < tbl.Rows.Count - 1; i++ ){
workSheet.Cells[ substCellItem.rowIndex + i, substCellItem.coluIndex ] = tbl.Rows[i][fieldName]; }
}else{
workSheet.Cells[ substCellItem.rowIndex, substCellItem.coluIndex ] = ((DataTable)dataList[dataIndex]).Rows[0][fieldName];
}
}
//=============================================================
//复制格式
//=============================================================
private void CopyExcelFormat( Excel.Worksheet workSheet, ArrayList dataList, ArrayList subsItemList )
{
int copyRowCount = 0;
foreach( SubstCell substCell in subsItemList ){
string cellStr = substCell.cellStr;//定义的单元格内容
ArrayList strList = UtlMisc.GetItemsListFromString( cellStr, ":" );//单元格内容用":"隔开
int dataIndex = int.Parse( strList[0].ToString() );//取数据集中第几张表
string fieldName = strList[1].ToString();//取表中的字段名
bool isList = strList[2].ToString().ToUpper() == "T";//判断是否是多行记录
if( isList ){//如果是多行记录
DataTable tbl = dataList[dataIndex] as DataTable;
int rowsCount = tbl.Rows.Count;
if ( rowsCount > copyRowCount ) copyRowCount = rowsCount;
}
}
for( int i = 1; i < copyRowCount - 1; i++ ){
(( Excel.Range )workSheet.Rows[7, Type.Missing] ).Copy( Type.Missing );
(( Excel.Range )workSheet.Cells[7 + i, 1] ).EntireRow.Insert( 0, 0 );
for( int j = 1; j < workSheet.UsedRange.Columns.Count +3 ; j++ ) workSheet.Cells[7 + i, j] = "";
}
}

//===========================================================
//模板的行、列和单元格
//===========================================================

public struct SubstCell
{
public int rowIndex;//模板的行
public int coluIndex;//模板的列
public string cellStr;//模板的单元格数据
}
//============================================================
//判断格式0:MAmount:F
//============================================================
private bool IsDataFieldCell( string cellStr )
{
if( string.IsNullOrEmpty( cellStr )) return false;//判断是否为空或""
ArrayList list = UtlMisc.GetItemsListFromString( cellStr, ":" );//截取字符串并用":"隔开
if( list.Count != 3 ) return false;//判断字符串的个数是否为3
if( !UtlMisc.IsIntString( list[0].ToString()) ) return false;//判断第一个字符是否是数字
return true;
}

//===========================================================
//读取Excel,取出单元格
//===========================================================

private ArrayList GetSubstCellList( string phyFileTar, int sheetIndex, int rowCount, int columnCount )
{
Excel.ApplicationClass excelApp = new Excel.ApplicationClass();
//打开模板文件,得到WorkBook对象
Excel.Workbooks workBooks = excelApp.Workbooks;
Excel.Workbook workBook = workBooks._Open( phyFileTar, Missing.Value, Missing.Value, Missing.Value, Missing.Value
, Missing.Value, Missing.Value, Missing.Value, Missing.Value