您的位置:首页 > 其它

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

2012-03-31 17:44 495 查看
话说,上次做了个自动化导入导出EXCEL数据程序,用的很是Happy.

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

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

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

于是有了这次的大更新。

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

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

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

?
改用自己编写的填充方法,主要是因为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这几个主流的控件或者库。

整理一下这些东东的优缺点,也作为一个归档。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: