// <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的更多相关文章

  1. .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)

    .Net MVC  导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构)   public cl ...

  2. vb.net-三种将datagridview数据导出为excel文件的函数

    第一种方法较慢,但是数据格式都比较好,需要引用excel的 Microsoft.Office.Interop.Excel.dll  office.dll #Region "导出excel函数 ...

  3. 机房收费系统——在VB中将MSHFlexGrid控件中的数据导出到Excel

    机房收费系统中,好多查询的窗体都包含同一个功能:将数据库中查询到的数据显示在MSHFlexGrid控件中,然后再把MSHFlexGrid控件中的数据导出到Excel表格中. 虽然之前做过学生信息管理系 ...

  4. 将Datagridview中的数据导出至Excel中

        首先添加一个模块ImportToExcel,并添加引用         然后导入命名空间: Imports Microsoft.Office.Interop Imports System.Da ...

  5. Delphi 数据导出到Excel

    好多办公软件特别是财务软件,都需要配备把数据导出到Excel,下面就来介绍两种数据导出方法 1.ADODB导出查询结果(此方法需要安装Excel) 2.二维表数据导出(根据Excel文件结构生成二进制 ...

  6. 涂抹mysql笔记-数据导出导入

    数据导出导入<>利用CSV存储引擎加载数据:CSV存储引擎基于CSV格式文件存储数据,CSV格式是纯文本格式的文件,以逗号分隔取值.CSV引擎表的所有列值不能为空.Excel可以直接打开有 ...

  7. C#将数据集DataSet中的数据导出到EXCEL文件的几种方法

    using System; using System.Collections.Generic; using System.Text; using System.Data; using System.W ...

  8. struts2结合poi-3.7实现数据导出为excel

    我们在处理数据的时候,有可能要将数据导出到excel文件中,那么java中是怎么实现的呢?apache开发的poi就可以帮我们实现啦,它也是开源的代码,导入相应的jar包,就可以轻松实现,下面让我们来 ...

  9. DataTable数据导出到Excel,并发送到客户端进行下载

    本代码实现思路是:页面显示和导出分开,导出的数据和用于页面显示的是同一查询数据方式,所以也是同样的数据,只是在导出数据时从数据库重新捞了一次数据.此导出数据方式会先将数据保存到Excel中,然后将创建 ...

随机推荐

  1. 使用hive访问elasticsearch的数据

    使用hive访问elasticsearch的数据 1.配置 将elasticsearch-hadoop-2.1.1.jar拷贝到hive/lib hive -hiveconf hive.aux.jar ...

  2. JQuery基础教程:事件(上)

    在页面加载后执行任务      之前我们已经知道了$(document).ready()是jQuery基于页面加载执行任务的一种主要方式,但是要知道原生的window.onload事件也可以实现相同的 ...

  3. VISUAL STUDIO 2008 WINDOWS FORM项目发布生成安装包详解(转)

    转自:http://www.cnblogs.com/killerofyang/archive/2012/05/31/2529193.html Visual Studio 2008 Windows Fo ...

  4. android softinput 相关

    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN | WindowManager.Layo ...

  5. NOIP2013Day1解题报告

    本来今天晚上拿13年NOIP的题目来做一下,测测能够得多少分,结果一晚上把Day1写完竟然AK了,吼吼吼 D1T1,题目:http://codevs.cn/problem/3285/ 很水的一道快速幂 ...

  6. Facebook 的系统架构(转)

    来源:http://www.quora.com/What-is-Facebooks-architecture(由Micha?l Figuière回答) 根据我现有的阅读和谈话,我所理解的今天Faceb ...

  7. 二叉树删除 lisp

    ;;; From ANSI Common Lisp ; If you have questions or comments about this code, or you want; somethin ...

  8. 洛谷P2727 01串 Stringsobits

    P2727 01串 Stringsobits 24通过 55提交 题目提供者该用户不存在 标签USACO 难度普及+/提高 提交  讨论  题解 最新讨论 这题的思路是啥啊!!!跪求- 题目背景 考虑 ...

  9. 【SSH 1】SSH框架的基本理解

    导读:在结束了BS之后,接触到的第一个项目算是网上商城了.这次用到了和之前都不一样的框架:SSH.这个项目就和之前学牛腩一样,有着里程碑的意义.当然了,这也就意味着,什么都是新鲜的,接触到的东西,有时 ...

  10. Linux下的”锁“事儿

    原由 之所以写这篇文章当然还是在面试中涉及了对本文标题的相关问题-互斥锁和自旋锁的区别.听到这个问题的时候,我是比较忐忑的.互斥锁我还能简单说一些,但是对于自旋锁的了解几乎为零.为此,将总结Linux ...