程序化导入导出EXCEL数据,完全由模板输出

话说,上次做了个自动化导入导出EXCEL数据程序,用的很是Happy.

但,实在是没想到脖子离职,一下子市场部所有的数据都压在了我一个人身上。

还是要花少量时间来COPY /PASTE,每天都觉得事情做不完。

无奈啊,作为一个懒惰的人,不得不再想办法,简化工作。

于是有了这次的大更新。

这次采用ASPOSE.CELLS来完成数据的导出,GEMBOX的模板功能太弱了,动不动无法导入模板。

虽然是采用了ASPOSE来完成,但自己也要动手来改一下它的数据导入到excel函数,改成使用自己写的,不然真的很崩溃,格式完全让我无语。

言归正传,将主要用到的方法写下来。

 Aspose.Cells.Workbook mybook = new Aspose.Cells.Workbook();//实例化
mybook.Open(Application.StartupPath + "/Template/" + myTask.TaskTemplate);//加载模板
 Aspose.Cells.Worksheet ws2 = mybook.Worksheets[myTask.SheetArea[i].name];//获取sheet
 InsertData_ASPOSE(ws2, myTask.SheetArea[i]);//填充sheet
mybook.Save(textBox1.Text.ToString() + "/ASPOSE_" + myTask.TaskName + dateTimePicker1.Value.ToString("yyyyMMdd") + ".xls");//保存数据

改用自己编写的填充方法,主要是因为ASPOSE的格式存在问题,如果你多次对一个表进行操作的话。

 
  
private void InsertData_ASPOSE(Aspose.Cells.Worksheet ws, Moops.Info.Configuration.configurationTaskInfoSheetArea DataArea)
{
try
{

for ( int i = 0 ; i < DataArea.DataArea.Length; i ++ )
{
string key = DataArea.DataArea[i].datatype;
DataTable dt
= ds1.Tables[ 0 ];
// DataTable dt = ds1.Tables[0].DefaultView.ToTable(false, DataArea.DataArea[i].data_column_name.Split(','));
DataTable dt_out = dt.Clone();
// DataRow aDataRow = dtItemPrice.NewRow();

// aDataRow.ItemArray = drItemPrices[i].ItemArray;

// dtItemPrice.Rows.Add(aDataRow);

DataRow[] myrows
= dt.Select(myTask.DataType + " =' " + key + " ' " );
foreach (DataRow row in myrows)
{
dt_out.ImportRow(row);
}
DataTable dt_result
= dt_out.DefaultView.ToTable( false , DataArea.DataArea[i].data_column_name.Split( ' , ' ));
string [] columnname = DataArea.DataArea[i].column_name.Split( ' , ' );
int s = columnname.Length - 1 ;
for ( int j = dt_result.Columns.Count - 1 ; j >= 0 ; j -- )
{
if (s >= 0 )
{
dt_result.Columns[j].ColumnName
= columnname[s].ToString();
s
-- ;
}
else
{
break ;
}
}
// int firstColumn = 0;
// firstColumn =((int)(Convert.ToChar(DataArea.DataArea[i].start_column.Substring(0, 1)))-(int)('A'));
// ws.Cells[DataArea.DataArea[i].start_column].PutValue(0);
// ws.ActiveCell = DataArea.DataArea[i].start_column;
// Aspose.Cells.Cell mycell = ws.Cells[DataArea.DataArea[i].start_column];
// mycell.PutValue(0);
// ws.ActiveCell = DataArea.DataArea[i].start_column;
InsertDataTableWithAspose(ws.Cells, dt_result, 0 , GetColumnIndex(DataArea.DataArea[i].start_column) , true );
// int sx = ws.Cells.ImportDataTable(dt_result, true,DataArea.DataArea[i].start_column);
// ws.AutoFitColumns();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
 
  
private int InsertDataTableWithAspose(Aspose.Cells.Cells Cells, DataTable dataTable, int startRow, int startColumn, bool columnHeaders)
{
int num2;
int num3 = 0 ;
if (columnHeaders)
{
num2
= 0 ;
do
{
Cells[startRow, startColumn
+ num2].PutValue( dataTable.Columns[num2].ColumnName);
num2
++ ;
}
while (num2 < dataTable.Columns.Count);
num3
++ ;
}
int num = 0 ;
if (dataTable.Rows.Count > 0 )
{
do
{
num2
= 0 ;
do
{
Cells[startRow
+ num3 + num, startColumn + num2].PutValue(dataTable.Rows[num][num2]);
num2
++ ;
}
while (num2 < dataTable.Columns.Count);
num
++ ;
}
while (num < dataTable.Rows.Count);
}
return (num + num3);
}

好了,差不多了,这样只要加载了数据,就可以填充到自己需要的模板中了。

哈哈,又可以HAPPY的轻松的应对工作了。

近期准备对用到EXCEL导入导出功能的一些控件作个总结,大概有EXCELLIBRAY,MYXLS,NPOI,GEMBOX,ASPOSE这几个主流的控件或者库。

整理一下这些东东的优缺点,也作为一个归档。

转载于:https://www.cnblogs.com/massinger/archive/2011/05/16/2047464.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值