基于asp.net的excel导入导出
2017-08-31 13:54
281 查看
新建aspx文件、代码大概如下:
aspx.cs中代码如下:
using NPOI.HSSF.UserModel;
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using XBase.Model.Office.PurchaseManager;
using XBase.Common;
using XBase.Business.Office.PurchaseManager;
using System.Collections.Generic;
using System.Data.OleDb;
using System.IO;
using System.Data;
public partial class Pages_Office_FinanceManager_ReceivablePayable : System.Web.UI.Page
{
HSSFWorkbook hssfworkbook;
protected void Page_Load(object sender, EventArgs e)
{
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btn_excel_Click1(object sender, EventArgs e)
{
XBase.Model.Office.SellReport.AccountsRP AccountsRP = new XBase.Model.Office.SellReport.AccountsRP();
DataTable dt = XBase.Business.Office.PurchaseManager.PurchaseOrderBus.GetAccountsRP();
OutputToExecl.ExportToTableFormat(this, dt,
new string[] { "订单编号", "类型", "供应商", "发票号", "应付金额", "已付金额", "付款金额" },
new string[] { "SalesOrderNo", "type", "CustName", "InvoiceNum", "ComSendMoney", "ReceivedPrepaid", "fk" }, "应付报表");
}
protected void btn_excel_Click2(object sender, EventArgs e)
{
string strcompanycd = ((UserInfoUtil)SessionUtil.Session["UserInfo"]).CompanyCD;
string struid = ((UserInfoUtil)SessionUtil.Session["UserInfo"]).EmployeeNum;
try
{
/*文件名*/
string FileName = string.Empty;
/*上传后完整的文件路径包含文件名*/
string FileNewUrl = string.Empty;
#region 上传验证
/*获取公司的上传路径*/
string FileUrl = XBase.Business.Office.SupplyChain.ProductInfoBus.GetCompanyUpFilePath(strcompanycd);
/*验证该公司路径是否存在 不存在则创建*/
DirectoryInfo dir = new DirectoryInfo(FileUrl);
if (!dir.Exists)
{
try
{
dir.Create();
}
catch (Exception ex)
{
this.lbl_resultReceivable.Text = ex.ToString();
return;
}
}
/*验证是否选择了文件*/
if (string.IsNullOrEmpty(fileExportExcelReceivable.PostedFile.FileName))
{
this.lbl_resultReceivable.Text = "请选择需要导入的Excel文件";
return;
}
/*验证文件类型*/
string FileExtension = fileExportExcelReceivable.PostedFile.FileName.Split('.')[1].ToUpper();
if (FileExtension != "XLS" && FileExtension != "XLSX")
ErrorMsg += "文件错误,请上传正确的Excel文件\\n";
/*判断是否存在异常*/
if (!string.IsNullOrEmpty(ErrorMsg))
{
this.lbl_resultReceivable.Text = ErrorMsg;
return;
}
/*上传文件*/
string strID = Guid.NewGuid().ToString();
FileName = strID + "." + FileExtension.ToLower();
FileNewUrl = FileUrl + "\\" + FileName;
try
{
fileExportExcelReceivable.PostedFile.SaveAs(FileNewUrl);
}
catch (Exception ex)
{
this.lbl_resultReceivable.Text = ex.ToString();
}
#endregion
DataSet ds = ToDataTable(FileNewUrl);
foreach (DataRow dr in ds.Tables["应付报表$"].Rows)
{
try
{
string[] listADD = new string[1];
string order = dr[0].ToString();
int money = int.Parse(dr[6].ToString());
string sql = @"UPDATE officedba.AccountsRP SET ReceivedPrepaid = (SELECT ReceivedPrepaid+" + money + " FROM officedba.AccountsRP where SalesOrderNo='" + order + "') WHERE SalesOrderNo='" + order + "'";
listADD[0] = sql;
XBase.Business.Office.SellManager.SellSendBus.UpdatestrSql(listADD);
}
catch (Exception ex)
{
continue;
}
}
}
catch (Exception ex)
{
this.lbl_resultReceivable.Text = "导入失败" + ex.ToString();
return;
}
}
public static DataSet ToDataTable(string filePath)
{
string connStr = "";
string fileType = System.IO.Path.GetExtension(filePath);
if (string.IsNullOrEmpty(fileType)) return null;
if (fileType == ".xls")
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePath + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
else
connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
string sql_F = "Select * FROM [{0}]";
OleDbConnection conn = null;
OleDbDataAdapter da = null;
DataTable dtSheetName = null;
DataSet ds = new DataSet();
try
{
// 初始化连接,并打开
conn = new OleDbConnection(connStr);
conn.Open();
// 获取数据源的表定义元数据
string SheetName = "";
dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
// 初始化适配器
da = new OleDbDataAdapter();
for (int i = 0; i < dtSheetName.Rows.Count; i++)
{
SheetName = (string)dtSheetName.Rows[i]["TABLE_NAME"];
if (!SheetName.Contains("$") && !SheetName.Replace("'", "").EndsWith("$"))
{
continue;
}
//sql_F = "Select * FROM [{0}] ";
if (SheetName.Contains("应付报表$"))
{
sql_F = "Select * FROM [{0}] where F3 <> '' and F6 <> '已付金额' ";
}
da.SelectCommand = new OleDbCommand(String.Format(sql_F, SheetName), conn);
DataSet dsItem = new DataSet();
da.Fill(dsItem, SheetName);
ds.Tables.Add(dsItem.Tables[0].Copy());
}
}
catch (Exception ex)
{
}
finally
{
// 关闭连接
if (conn.State == ConnectionState.Open)
{
conn.Close();
da.Dispose();
conn.Dispose();
}
}
return ds;
}
}
查询数据的sql语句:
SELECT
a.SalesOrderNo,
CASE a.ExtField1
WHEN 1 THEN '采购'
WHEN 2 THEN '销售'
ELSE '委外'
END AS type,
b.CustName,
a.InvoiceNum,
a.ComSendMoney,
a.ReceivedPrepaid,
isnull(null,0) as fk
FROM officedba.AccountsRP a ,officedba.ProviderInfo b
WHERE a.IsAll = 1 and a.Dept=b.ID and a.Status=1
<!--导入Excel文件--> <table width="99%" border="0" align="center" cellpadding="0" id="searchtable" cellspacing="0" bgcolor="#CCCCCC"> <tr> <td bgcolor="#FFFFFF"> <table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#CCCCCC" class="table"> <tr class="table-item"> <td width="12%" height="20" bgcolor="#E7E7E7" align="center"> <asp:Button ID="btn_ExportReceivable" Text="导出Excel" OnClick="btn_excel_Click1" runat="server"/> </td> <td width="48%" bgcolor="#FFFFFF"> <input id="fileExportExcelReceivable" style="width:100%" type="file" runat="server"/> </td> <td width="10%" bgcolor="#E7E7E7" align="center"> <asp:Button ID="btn_excelReceivable" Visible="true" Text="导入Excel" OnClick="btn_excel_Click2" runat="server"/> </td> </tr> </table> </td> </tr> </table> <!--导入结束-->
aspx.cs中代码如下:
using NPOI.HSSF.UserModel;
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using XBase.Model.Office.PurchaseManager;
using XBase.Common;
using XBase.Business.Office.PurchaseManager;
using System.Collections.Generic;
using System.Data.OleDb;
using System.IO;
using System.Data;
public partial class Pages_Office_FinanceManager_ReceivablePayable : System.Web.UI.Page
{
HSSFWorkbook hssfworkbook;
protected void Page_Load(object sender, EventArgs e)
{
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btn_excel_Click1(object sender, EventArgs e)
{
XBase.Model.Office.SellReport.AccountsRP AccountsRP = new XBase.Model.Office.SellReport.AccountsRP();
DataTable dt = XBase.Business.Office.PurchaseManager.PurchaseOrderBus.GetAccountsRP();
OutputToExecl.ExportToTableFormat(this, dt,
new string[] { "订单编号", "类型", "供应商", "发票号", "应付金额", "已付金额", "付款金额" },
new string[] { "SalesOrderNo", "type", "CustName", "InvoiceNum", "ComSendMoney", "ReceivedPrepaid", "fk" }, "应付报表");
}
protected void btn_excel_Click2(object sender, EventArgs e)
{
string strcompanycd = ((UserInfoUtil)SessionUtil.Session["UserInfo"]).CompanyCD;
string struid = ((UserInfoUtil)SessionUtil.Session["UserInfo"]).EmployeeNum;
try
{
/*文件名*/
string FileName = string.Empty;
/*上传后完整的文件路径包含文件名*/
string FileNewUrl = string.Empty;
#region 上传验证
/*获取公司的上传路径*/
string FileUrl = XBase.Business.Office.SupplyChain.ProductInfoBus.GetCompanyUpFilePath(strcompanycd);
/*验证该公司路径是否存在 不存在则创建*/
DirectoryInfo dir = new DirectoryInfo(FileUrl);
if (!dir.Exists)
{
try
{
dir.Create();
}
catch (Exception ex)
{
this.lbl_resultReceivable.Text = ex.ToString();
return;
}
}
/*验证是否选择了文件*/
if (string.IsNullOrEmpty(fileExportExcelReceivable.PostedFile.FileName))
{
this.lbl_resultReceivable.Text = "请选择需要导入的Excel文件";
return;
}
/*验证文件类型*/
string FileExtension = fileExportExcelReceivable.PostedFile.FileName.Split('.')[1].ToUpper();
if (FileExtension != "XLS" && FileExtension != "XLSX")
ErrorMsg += "文件错误,请上传正确的Excel文件\\n";
/*判断是否存在异常*/
if (!string.IsNullOrEmpty(ErrorMsg))
{
this.lbl_resultReceivable.Text = ErrorMsg;
return;
}
/*上传文件*/
string strID = Guid.NewGuid().ToString();
FileName = strID + "." + FileExtension.ToLower();
FileNewUrl = FileUrl + "\\" + FileName;
try
{
fileExportExcelReceivable.PostedFile.SaveAs(FileNewUrl);
}
catch (Exception ex)
{
this.lbl_resultReceivable.Text = ex.ToString();
}
#endregion
DataSet ds = ToDataTable(FileNewUrl);
foreach (DataRow dr in ds.Tables["应付报表$"].Rows)
{
try
{
string[] listADD = new string[1];
string order = dr[0].ToString();
int money = int.Parse(dr[6].ToString());
string sql = @"UPDATE officedba.AccountsRP SET ReceivedPrepaid = (SELECT ReceivedPrepaid+" + money + " FROM officedba.AccountsRP where SalesOrderNo='" + order + "') WHERE SalesOrderNo='" + order + "'";
listADD[0] = sql;
XBase.Business.Office.SellManager.SellSendBus.UpdatestrSql(listADD);
}
catch (Exception ex)
{
continue;
}
}
}
catch (Exception ex)
{
this.lbl_resultReceivable.Text = "导入失败" + ex.ToString();
return;
}
}
public static DataSet ToDataTable(string filePath)
{
string connStr = "";
string fileType = System.IO.Path.GetExtension(filePath);
if (string.IsNullOrEmpty(fileType)) return null;
if (fileType == ".xls")
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePath + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
else
connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
string sql_F = "Select * FROM [{0}]";
OleDbConnection conn = null;
OleDbDataAdapter da = null;
DataTable dtSheetName = null;
DataSet ds = new DataSet();
try
{
// 初始化连接,并打开
conn = new OleDbConnection(connStr);
conn.Open();
// 获取数据源的表定义元数据
string SheetName = "";
dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
// 初始化适配器
da = new OleDbDataAdapter();
for (int i = 0; i < dtSheetName.Rows.Count; i++)
{
SheetName = (string)dtSheetName.Rows[i]["TABLE_NAME"];
if (!SheetName.Contains("$") && !SheetName.Replace("'", "").EndsWith("$"))
{
continue;
}
//sql_F = "Select * FROM [{0}] ";
if (SheetName.Contains("应付报表$"))
{
sql_F = "Select * FROM [{0}] where F3 <> '' and F6 <> '已付金额' ";
}
da.SelectCommand = new OleDbCommand(String.Format(sql_F, SheetName), conn);
DataSet dsItem = new DataSet();
da.Fill(dsItem, SheetName);
ds.Tables.Add(dsItem.Tables[0].Copy());
}
}
catch (Exception ex)
{
}
finally
{
// 关闭连接
if (conn.State == ConnectionState.Open)
{
conn.Close();
da.Dispose();
conn.Dispose();
}
}
return ds;
}
}
查询数据的sql语句:
SELECT
a.SalesOrderNo,
CASE a.ExtField1
WHEN 1 THEN '采购'
WHEN 2 THEN '销售'
ELSE '委外'
END AS type,
b.CustName,
a.InvoiceNum,
a.ComSendMoney,
a.ReceivedPrepaid,
isnull(null,0) as fk
FROM officedba.AccountsRP a ,officedba.ProviderInfo b
WHERE a.IsAll = 1 and a.Dept=b.ID and a.Status=1
相关文章推荐
- ASP.NET中导入和导出标准Excel文件(转)
- ExcelHelper(Excel和C#、asp.net导入导出,通用类)(二)
- 发布asp.net应用程序后,其中导入、导出excel报错的解决方案
- Excel导入导出,生成和下载Excel报表、附件等操作--ASP.NET
- asp.net中Excel导入,导出
- [导入]Asp.net 2.0 GridView数据导出Excel文件(示例代码下载)
- ASP.NET之Excel下载模板、导入、导出操作
- Asp.net程序中用NPOI生成标准Excel报表,导入导出一应俱全
- ASP.NET- 使用NPOI导入导出标准Excel
- ExcelHelper(Excel和C#、asp.net导入导出,通用类)(三)
- asp.net Excel导入和导出
- ASP.NET导入导出Excel方法大全
- ASP.NET中导入和导出标准Excel文件(转)
- asp.net(C#)excel导入导出类
- ExcelHelper(Excel和C#、asp.net导入导出,通用类)(四)
- Asp.net 导入导出Excel
- asp.net Excel导入和导出
- 【转】Asp.net程序中用NPOI生成标准Excel报表,导入导出一应俱全
- ExcelHelper(Excel和C#、asp.net导入导出,通用类)(五)
- ASP.NET导出导入Excel