DevExpress XtraGrid 数据导出导入Excel
// <summary>
/// 导出按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmAppItem_F9ClickHandler(object sender, EventArgs e)
{
string strName = "";
try
{
if (gvSelectedItems.RowCount == 0)
{
MessageBoxShow.ShowProMessage("Grid表格中没有数据,不能导出为Excel");
return;
}
DateTime MMSDate = RealSailing.UI.Service.ServiceManager.GetSystemDateTime();
using (SaveFileDialog saveFileDialog = new SaveFileDialog())
{
saveFileDialog.Filter = "导出Excel(*.xls)|*.xls";
saveFileDialog.FilterIndex = 0;
saveFileDialog.RestoreDirectory = true;
saveFileDialog.CreatePrompt = true;
saveFileDialog.Title = "导出文件保存路径";
//默认的文件名
saveFileDialog.FileName = strTitle + " - " + MMSDate.ToString("yyyyMMdd");
//saveFileDialog.ShowDialog();
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
strName = saveFileDialog.FileName;
if (strName.Length != 0)
{
gridColumn2.Visible = false;
gridItemID2.Visible = true;
gridItemID2.VisibleIndex = 0;
gvSelectedItems.ExportToXls(strName);
gridColumn2.Visible = true;
gridItemID2.Visible = false;
MessageBoxShow.ShowProMessage("导出Excel成功", strTitle);
//关闭操作
System.Reflection.Missing miss = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Application objExcel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook objWorkBook = objExcel.Workbooks.Add(miss);
Microsoft.Office.Interop.Excel.Worksheet objSheet = (Microsoft.Office.Interop.Excel.Worksheet)objWorkBook.ActiveSheet;
objWorkBook.Close(null, null, null);
objExcel.Workbooks.Close();
objExcel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(objExcel);
System.Runtime.InteropServices.Marshal.ReleaseComObject(objWorkBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(objSheet);
objSheet = null;
objWorkBook = null;
objExcel = null;
}
else
{
MessageBoxShow.ShowProMessage("保存的Excel名称不能为空");
} }
}
}
catch (System.Exception msg)
{
MessageBoxShow.ShowProMessage(msg.ToString());
}
finally
{
GC.Collect();
}
} 导入Excel
/// <summary>
/// 导入按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmAppItem_F8ClickHandler(object sender, EventArgs e)
{
try
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Title = "Excel文件";
ofd.FileName = "";
ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
ofd.Filter = "Excel文件(*.xls)|*.xls";
ofd.ValidateNames = true; //文件有效性验证ValidateNames,验证用户输入是否是一个有效的Windows文件名
ofd.CheckFileExists = true; //验证路径有效性
ofd.CheckPathExists = true; //验证文件有效性
string strName = string.Empty;
if (ofd.ShowDialog() == DialogResult.OK)
{
strName = ofd.FileName;
}
if (strName == "")
{
return;
}
if (EcxelToGridView(strName, this.gvSelectedItems))
{
MessageBoxShow.ShowProMessage("数据导入成功", strTitle);
//isChanged = true;
}
else
MessageBoxShow.ShowProMessage("数据导入失败,请检查导入的Excel格式与数据是否正确", strTitle);
this.Cursor = Cursors.Default;
}
catch (System.Exception Msg)
{
MessageBoxShow.ShowProMessage("数据导入失败,请检查导入的Excel格式与数据是否正确", strTitle);
//MessageBoxShow.ShowErrMessage(Msg.ToString()+"数据导入失败,请检查导入的Excel格式与数据是否正确");
}
}
/// <summary>
/// Excel数据导入方法
/// </summary>
/// <param name="filePath"></param>
/// <param name="dgv"></param>
/// <returns></returns>
public bool EcxelToGridView(string filePath, DevExpress.XtraGrid.Views.Grid.GridView dgv)
{
bool isVailed = false;
string itemid = string.Empty;
string itemplu = string.Empty;
string itemName = string.Empty;
//根据路径打开一个Excel文件并将数据填充到ds中
try
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " + filePath + ";Extended Properties ='Excel 8.0;HDR=YES;IMEX=1'";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
//获取Excel中的sheet的名称
string SheetName= GetExcelSheetNames(filePath)[0];
//strExcel = "select * from [sheet1$]";
strExcel = "select * from [" + SheetName + "$]";
myCommand = new OleDbDataAdapter(strExcel, strConn);
// RealSailing.DataSet.SlipInfo.SLPD010_SLIPSUMHDS ds = new RealSailing.DataSet.SlipInfo.SLPD010_SLIPSUMHDS();
System.Data.DataSet ds = new System.Data.DataSet();
myCommand.Fill(ds, "table1");
conn.Close();
if (ds.Tables["table1"].Rows.Count == 0)
{
MessageBoxShow.ShowProMessage("要导入的Excel没有数据");
}
ExcelDS.Clear();
for (int j = 0; j < ds.Tables["table1"].Rows.Count; j++)
{
if (ds.Tables["table1"].Rows[j]["商品id"].ToString().Trim() != string.Empty)
itemid = ds.Tables["table1"].Rows[j]["商品id"].ToString().Trim();
if (ds.Tables["table1"].Rows[j]["商品货号"].ToString().Trim() != string.Empty)
itemplu = ds.Tables["table1"].Rows[j]["商品货号"].ToString().Trim();
else
itemplu = " ";
if (ds.Tables["table1"].Rows[j]["商品名称"].ToString().Trim() != string.Empty)
itemName = ds.Tables["table1"].Rows[j]["商品名称"].ToString().Trim();
//把数据填充到ds中
FillDataToDs(itemid, itemplu, itemName);
isVailed = true;
}
if (lblSelectDs.Tables["MSTM150_ITEM"].Rows.Count == 0)
{
isVailed = false;
}
else if (ExcelDS.Tables["MSTM150_ITEM"].Rows.Count>0)
{//重复数据 显示提示
MsShowData msShow = new MsShowData();
msShow.GetDs = ExcelDS;
msShow.ShowDialog();
isVailed = true;
}
return isVailed;
}
catch (System.Data.OleDb.OleDbException ex)
{
if (ex.Message.IndexOf("不是一个有效名称。请确认它不包含无效的字符或标点,且名称不太长") != -1)
{
return false;
}
return false;
}
}
/// <summary>
/// 获取获得当前你选择的Excel Sheet的所有名字
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public static string[] GetExcelSheetNames(string filePath)
{
Microsoft.Office.Interop.Excel.ApplicationClass excelApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
Microsoft.Office.Interop.Excel.Workbooks wbs = excelApp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook wb = wbs.Open(filePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing);
int count = wb.Worksheets.Count;
string[] names = new string[count];
for (int i = 1; i <= count; i++)
{
names[i - 1] = ((Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[i]).Name;
}
wb.Close(null, null, null);
excelApp.Quit();
wbs.Close();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
System.Runtime.InteropServices.Marshal.ReleaseComObject(wbs);
excelApp = null;
wbs = null;
wb = null;
return names;
}
private void FillDataToDs(string itemid, string itemplu, string itemName)
{
DataRow[] rows = lblSelectDs.Tables["MSTM150_ITEM"].Select(string.Format("MSTM150_ITEMID='{0}'", itemid));
if (rows.Length == 0)
{
if (itemid.Trim() != string.Empty && itemplu.Trim() != string.Empty && itemName != string.Empty)
{
DataRow dr;
dr = lblSelectDs.Tables["MSTM150_ITEM"].NewRow();
dr[MSTM150_ITEM.MSTM150_ITEMID] = itemid;
dr["MSTM151_PLUCD"] = itemplu;
dr["MSTM150_ITEMCNM"] = itemName;
dr["CheckRemove"] = "0";
lblSelectDs.Tables["MSTM150_ITEM"].Rows.Add(dr);
}
//else if (itemid.Trim() == string.Empty)
//{
// string st = "导入的商品id不允许为空";
// sb.Append(st);
// sb.Append("\r\n");
//}
//else if (itemplu.Trim() == string.Empty)
//{
// string st = "导入的商品编码不允许为空";
// sb.Append(st);
// sb.Append("\r\n");
//}
//else if (itemName.Trim() == string.Empty)
//{
// string st = "导入的商品名称不允许为空";
// sb.Append(st);
// sb.Append("\r\n");
//}
}
else if(rows.Length>0)
{
ExcelDS.Tables["MSTM150_ITEM"].ImportRow(rows[0]);
}
}
private void gvSelectedItems_RowCountChanged(object sender, EventArgs e)
{//导出按钮
this.F9Property.Enable=(gvSelectedItems.RowCount == 0) ? false : true;
} //导入导出Excel 注意的是及时的关闭Excel,不然占用进程很麻烦,我调试了大半天太弄好的
DevExpress XtraGrid 数据导出导入Excel的更多相关文章
- .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)
.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构) public cl ...
- vb.net-三种将datagridview数据导出为excel文件的函数
第一种方法较慢,但是数据格式都比较好,需要引用excel的 Microsoft.Office.Interop.Excel.dll office.dll #Region "导出excel函数 ...
- 机房收费系统——在VB中将MSHFlexGrid控件中的数据导出到Excel
机房收费系统中,好多查询的窗体都包含同一个功能:将数据库中查询到的数据显示在MSHFlexGrid控件中,然后再把MSHFlexGrid控件中的数据导出到Excel表格中. 虽然之前做过学生信息管理系 ...
- 将Datagridview中的数据导出至Excel中
首先添加一个模块ImportToExcel,并添加引用 然后导入命名空间: Imports Microsoft.Office.Interop Imports System.Da ...
- Delphi 数据导出到Excel
好多办公软件特别是财务软件,都需要配备把数据导出到Excel,下面就来介绍两种数据导出方法 1.ADODB导出查询结果(此方法需要安装Excel) 2.二维表数据导出(根据Excel文件结构生成二进制 ...
- 涂抹mysql笔记-数据导出导入
数据导出导入<>利用CSV存储引擎加载数据:CSV存储引擎基于CSV格式文件存储数据,CSV格式是纯文本格式的文件,以逗号分隔取值.CSV引擎表的所有列值不能为空.Excel可以直接打开有 ...
- C#将数据集DataSet中的数据导出到EXCEL文件的几种方法
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.W ...
- struts2结合poi-3.7实现数据导出为excel
我们在处理数据的时候,有可能要将数据导出到excel文件中,那么java中是怎么实现的呢?apache开发的poi就可以帮我们实现啦,它也是开源的代码,导入相应的jar包,就可以轻松实现,下面让我们来 ...
- DataTable数据导出到Excel,并发送到客户端进行下载
本代码实现思路是:页面显示和导出分开,导出的数据和用于页面显示的是同一查询数据方式,所以也是同样的数据,只是在导出数据时从数据库重新捞了一次数据.此导出数据方式会先将数据保存到Excel中,然后将创建 ...
随机推荐
- Selenium 疑问之二:如何使页面滚动条移动到指定元素element的位置处?
在用selenium做测试时,会遇到需要操作的元素不在当前可视页面中的情况,如果是手工测试,自然很简单,手动拖拽滚动条到目标元素处即可. 那么,selenium如何实现这种情形呢?答案是需要借助Jav ...
- python函数 位置参数,关键字参数,可变参数优先级
def fun(arg,args=1,*arg,**keywords): python 一共有这四类参数,第一类最常见,不用多说,第二类,关键字参数,python能通过关键字找到参数,python函数 ...
- x86_64平台编译链接汇编程序
assemble: nasm -f elf32 sample.asm -l sample.lst link: ld -m elf_i386 -o test sample.o io.o
- 利用sql批量删除表,存储过程
利用sql批量删除表,存储过程. 最近用godaddy的空间,由于系统里面的表多,一个个的删除很麻烦,就网上搜集了一下解决方法. 给大家分享一下: 1.批量删除存储过程 declare @procNa ...
- maven多工程构建与打包
目标:webapp_aggregator为聚合和父pom工程,不包含代码和资源,webapp为主web工程,webapp_module1为子web工程,webapp_common为基础子工程,两个we ...
- org.apache.ibatis.reflection.ReflectionException
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.Reflecti ...
- 学习总结 java 父子级
package com.hanqi; //父类 public class Father { // public Father() // { // // } // public Father(Strin ...
- Java基础——clone()方法浅析
一.clone的概念 clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象.所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象.那 ...
- php curl 提交 总结
1.post https提交 方法 function curl_post2($url='', $postdata='', $options=array()){ $ch = curl_init($url ...
- C++三种内存分配方式
从静态存储区域分配:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量.静态分配的区域的生命期是整个软件运行期,就是说从软件运行开始到软件终止退出.只 ...