Winform中Excel数据导入与导出

合集下载

Excel数据导入与导出方法

Excel数据导入与导出方法

Excel数据导入与导出方法在日常工作中,Excel是一个广泛应用的电子表格软件,通过它我们可以方便地进行数据管理和分析。

本文将介绍Excel中的数据导入和导出方法,帮助读者更好地利用这一功能。

一、数据导入1. 从文本文件导入数据要从文本文件导入数据到Excel,首先打开一个新的工作簿。

然后,选择“数据”选项卡,点击“从文本”按钮。

2. 从数据库导入数据Excel也支持从数据库导入数据。

在“数据”选项卡中,点击“从其他来源”按钮,选择“从SQL Server”或其他数据库类型,按照向导的指示连接到数据库并选择数据表。

3. 从Web导入数据如果需要从Web导入数据,同样在“数据”选项卡中,点击“从Web”按钮,输入要导入的网页地址,按照向导的指示选择需要导入的数据。

二、数据导出1. 导出为文本文件在Excel中,我们可以将数据导出为文本文件。

首先,选择需要导出的数据范围,然后点击“文件”选项卡,选择“另存为”→“其他格式”,选择文件格式为“文本(Tab分隔)”或其他格式,点击“保存”。

2. 导出为PDF文件如果需要将Excel数据导出为PDF文件,选择需要导出的数据范围,然后点击“文件”选项卡,选择“另存为”→“PDF格式”,选择保存路径,点击“保存”。

3. 导出为图像文件Excel还支持将数据导出为图像文件,比如JPEG、PNG等格式。

选择需要导出的数据范围,点击“文件”选项卡,选择“另存为”→“其他格式”,选择文件格式为“JPEG”或其他格式,点击“保存”。

三、其他技巧1. 设置数据导入导出的选项在导入或导出数据之前,Excel还提供了一些选项供用户设置。

比如,在从文本文件导入数据时,可以设置分隔符和文本格式;在导出为文本文件时,可以设置分隔符和字符编码等。

2. 管理导入导出的映射当进行大量数据导入或导出时,Excel允许用户管理导入导出的映射,以便更方便地重复执行相同的操作。

3. 自动更新导入数据如果需要定期更新导入数据,可以使用Excel的数据连接功能,设置数据刷新的频率和方式,以确保数据持续更新。

数据导入与导出Excel中的外部数据连接技巧

数据导入与导出Excel中的外部数据连接技巧

数据导入与导出Excel中的外部数据连接技巧在处理大量数据时,Excel是一个非常强大的工具。

在Excel中,我们可以通过导入和导出外部数据来快速获取和整理数据。

本文将介绍一些数据导入与导出的技巧,帮助读者更好地利用Excel中的外部数据连接。

一、导入外部数据1. 打开Excel并新建一个工作表。

2. 点击“数据”选项卡,在“获取外部数据”组中选择“从其他来源”。

3. 在下拉菜单中选择合适的数据源,如“从文本文件”、“从Web”、“从SQL Server”等。

4. 根据数据源类型,按照相应的步骤进行配置和连接。

5. 选择要导入的数据,可以是整个文件,也可以是特定的表或查询结果。

6. 点击“导入”按钮,确认导入选项后,Excel将开始导入数据。

7. 根据需要可以对导入的数据进行一些处理和格式化。

二、导出外部数据1. 打开一个包含需要导出的数据的Excel工作簿。

2. 选择需要导出的数据区域。

3. 点击“文件”选项卡,在下拉菜单中选择“另存为”。

4. 在弹出的保存对话框中选择导出的目标文件类型,如CSV、文本文件、Access数据库等。

5. 根据文件类型的不同,进行相应的设置和配置,如选择字段分隔符、文本编码等。

6. 确认导出选项后,选择保存的路径和文件名。

7. 点击“保存”按钮,Excel将开始导出数据到所选的文件类型。

三、外部数据连接技巧1. 更新连接:在Excel中导入的外部数据连接是可以更新的。

在“数据”选项卡的“连接”组中,可以选择“刷新”按钮来更新连接的数据。

还可以设置刷新的时间间隔,实现自动刷新。

2. 数据筛选:导入外部数据后,可以使用Excel的数据筛选功能对数据进行筛选和排序,从而得到我们需要的结果。

3. 条件格式:利用条件格式能够根据自定义的规则对数据进行着色,帮助我们更好地理解和分析大量数据。

4. 公式计算:在Excel的导入数据中,可以使用各种公式和函数对数据进行计算和分析,从而得出更有意义的结果。

把WinForm的DataGridView的数据导出到Excel三种方法

把WinForm的DataGridView的数据导出到Excel三种方法

把WinForm的DataGridView的数据导出到Excel三种方法导出WinForm的DataGridView数据到Excel有多种方法,下面将详细介绍三种常用的方法:方法一:使用Microsoft.Office.Interop.Excel库这是一种常用的方法,使用Microsoft.Office.Interop.Excel库可以直接操作Excel文件。

首先,需要在项目中添加对Microsoft Office 的引用。

然后,可以按照以下步骤导出数据:1. 创建一个Excel应用程序对象:```csharpusing Excel = Microsoft.Office.Interop.Excel;Excel.Application excelApp = new Excel.Application(;```2.创建一个工作簿对象:```csharpExcel.Workbook workbook =excelApp.Workbooks.Add(Type.Missing);```3.创建一个工作表对象:```csharpExcel.Worksheet worksheet = workbook.ActiveSheet;```4. 将DataGridView中的数据导入到Excel中:```csharpfor (int i = 0; i < dataGridView.Rows.Count; i++)for (int j = 0; j < dataGridView.Columns.Count; j++)worksheet.Cells[i + 1, j + 1] =dataGridView.Rows[i].Cells[j].Value.ToString(;}```5. 保存Excel文件并关闭Excel应用程序:```csharpworkbook.SaveAs("路径\\文件名.xlsx");excelApp.Quit(;```方法二:使用OpenXml库OpenXml是一种用于操作Office文件的开放式标准。

Excel数据导入与导出的步骤与技巧

Excel数据导入与导出的步骤与技巧

Excel数据导入与导出的步骤与技巧Excel是一款非常流行的电子表格软件,广泛应用于数据处理和分析等工作中。

在日常工作中,我们经常需要将数据从其他来源导入到Excel中进行处理,或者将Excel中的数据导出到其他软件或应用程序中使用。

本文将为您介绍Excel数据导入与导出的步骤与技巧,帮助您轻松应对数据处理任务。

一、数据导入的步骤与技巧1.打开Excel软件,点击“文件”选项卡,在下拉菜单中选择“打开”命令。

2.在打开的对话框中,浏览并选择您要导入的数据文件,如CSV、TXT、数据库文件等,然后点击“打开”按钮。

3.在打开的数据导入向导中,可以按照向导的提示进行数据格式的选择和预览。

根据导入的数据类型,您可以选择适当的分隔符,如逗号、制表符等,以正确地将数据导入到Excel中。

4.在数据导入向导的最后一步,您可以选择将数据导入到现有的工作表中或新建一个工作表。

根据实际需求进行选择,并点击“完成”按钮完成数据导入。

5.导入后的数据可能需要进行一些调整和处理,以适应您的分析和计算需求。

您可以使用Excel提供的各种函数和工具对数据进行排序、筛选、删除重复值等操作,以获得所需的分析结果。

二、数据导出的步骤与技巧1.在Excel中打开您要导出的工作表,并选择您要导出的数据范围。

2.点击“文件”选项卡,在下拉菜单中选择“另存为”命令。

3.在另存为对话框中,选择您要导出的文件格式,如CSV、TXT、Excel格式等。

根据导出的需求,选择合适的格式,并指定保存的路径和文件名称。

4.点击“保存”按钮,Excel将会将选择的数据范围导出为您指定的文件格式。

如果需要进一步设置导出选项,可以点击“工具”或“选项”按钮,根据实际需求进行设置。

5.导出后的数据文件可以方便地在其他软件或应用程序中使用。

根据不同的文件格式,您可以进行进一步的数据处理和分析,以满足特定的需求。

三、数据导入与导出的技巧与注意事项1.在数据导入之前,确保您了解导入数据的格式和结构,并根据实际需求选择正确的导入方式和选项。

C# WinForm导入导出Excel

C# WinForm导入导出Excel
Excel.Workbooks wbs = excelApp.Workbooks;
Excel.Workbook wb = wbs.Open(filePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Microsoft.Office.Interop.Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
excel.Application.Workbooks.Add(true); ;
saveFileDialog.Title = "导出文件保存路径";
saveFileDialog.ShowDialog();
string strName = saveFileDialog.FileName;
System.Runtime.InteropServices.Marshal.ReleaseComObject(book);
System.Runtime.InteropServices.Marshal.ReleaseComObject(books);
toolStripProgressBar1.Value = 0;
System.Diagnostics.Process.Start(strName);
}
}
else
{
excel.Cells[i + 2, j ] = gridView[j, i].Value.ToString();
= "test";
int m = 0, n = 0;

C#winform导出导入ExcelDoc完整实例教程[网上看到的]

C#winform导出导入ExcelDoc完整实例教程[网上看到的]

C#winform导出导⼊ExcelDoc完整实例教程[⽹上看到的]还真没做过winform的导出导⼊,今天上⽹百度了⼀下。

结果---所以还是我⾃⼰写个吧。

之前做过web的,半搬半做就OK。

1添加引⽤:Aspose.Cells.dll(我们就叫⼯具包吧,可以从⽹上下载。

关于它的操作我在“Aspose.Cells操作说明中⽂版下载 Aspose C# 导出Excel 实例”⼀⽂中的说。

这⾥你暂时也可不理会它。

)Aspose.Cells.dll 和中⽂说明下载地址:即使没有安装office也能⽤噢,这是⼀个好强的⼤⼯具。

2编写Excel操作类using System;using System.Collections.Generic;using System.Text;using Aspose.Cells;using System.Data;public class AsposeExcel{private string outFileName = "";private string fullFilename = "";private Workbook book = null;private Worksheet sheet = null;public AsposeExcel(string outfilename, string tempfilename)//导出构造数{outFileName = outfilename;book = new Workbook();// book.Open(tempfilename);这⾥我们暂时不⽤模板sheet = book.Worksheets[0];}public AsposeExcel(string fullfilename)//导⼊构造数{fullFilename = fullfilename;// book = new Workbook();//book.Open(tempfilename);//sheet = book.Worksheets[0];}private void AddTitle(string title, int columnCount){sheet.Cells.Merge(0, 0, 1, columnCount);sheet.Cells.Merge(1, 0, 1, columnCount);Cell cell1 = sheet.Cells[0, 0];cell1.PutValue(title);cell1.Style.HorizontalAlignment = TextAlignmentType.Center; = "⿊体";cell1.Style.Font.Size = 14;cell1.Style.Font.IsBold = true;Cell cell2 = sheet.Cells[1, 0];cell1.PutValue("查询时间:" + DateTime.Now.ToLocalTime());cell2.SetStyle(cell1.Style);}private void AddHeader(DataTable dt){Cell cell = null;for (int col = 0; col < dt.Columns.Count; col++){cell = sheet.Cells[0, col];cell.PutValue(dt.Columns[col].ColumnName);cell.Style.Font.IsBold = true;}}private void AddBody(DataTable dt){for (int r = 0; r < dt.Rows.Count; r++){for (int c = 0; c < dt.Columns.Count; c++){sheet.Cells[r + 1, c].PutValue(dt.Rows[r][c].ToString());}}}//导出------------下⼀篇会⽤到这个⽅法public Boolean DatatableToExcel(DataTable dt){Boolean yn = false;try{// = sheetName;//AddTitle(title, dt.Columns.Count);//AddHeader(dt);AddBody(dt);sheet.AutoFitColumns();//sheet.AutoFitRows();book.Save(outFileName);yn = true;return yn;}catch (Exception e){return yn;// throw e;}}public DataTable ExcelToDatatalbe()//导⼊{Workbook book = new Workbook();book.Open(fullFilename);Worksheet sheet = book.Worksheets[0];Cells cells = sheet.Cells;//获取excel中的数据保存到⼀个datatable中DataTable dt_Import = cells.ExportDataTableAsString(0, 0, cells.MaxDataRow + 1, cells.MaxDataColumn + 1, false); // dt_Import.return dt_Import;}}3导出按钮事件中编写导出数据⽅法:private void bt_excel_out_Click(object sender, EventArgs e){SaveFileDialog saveFileDialog1 = new SaveFileDialog();//如果你直接从对话框中拉出来,就不⽤new了噢。

Excel数据导入和导出的方法总结

Excel数据导入和导出的方法总结

Excel数据导入和导出的方法总结Excel作为一种功能强大的电子表格软件,广泛应用于工作和学习中。

在处理大量数据时,数据的导入和导出是非常重要的功能。

本文将总结和介绍几种常用的Excel数据导入和导出的方法,帮助大家更高效地处理Excel数据。

一、导入数据方法1. 从文本文件导入数据:Excel可以导入各种文本文件,如CSV文件、文本文件等。

具体操作步骤为:打开Excel,选择“数据”选项卡,点击“从文本”按钮,选择要导入的文本文件,按照导入向导的提示,设置分隔符、数据格式等参数,最后点击“完成”即可将数据导入Excel。

2. 复制粘贴导入数据:如果数据来源于其他应用程序或者网页,可以使用复制粘贴的方法将数据导入Excel。

具体操作步骤为:将数据复制到剪贴板中,打开Excel,选定目标单元格或者数据区域,点击右键,在弹出菜单中选择“粘贴”选项,根据需要选择“保留源格式”或者“文本”,最后点击“确定”。

3. 从数据库导入数据:如果数据存储在数据库中,可以使用Excel的数据连接功能将数据从数据库导入Excel。

具体操作步骤为:打开Excel,选择“数据”选项卡,点击“来自其他来源”按钮,在弹出菜单中选择“从数据库”,按照向导的提示,选择数据库类型、服务器名称、身份验证方式等,设置查询条件,最后点击“完成”。

二、导出数据方法1. 导出为文本文件:可以将Excel数据导出为文本文件,以便在其他应用程序中使用。

具体操作步骤为:选定要导出的数据区域或者整个工作簿,选择“文件”菜单,点击“另存为”选项,选择保存位置和文件格式(如CSV文件),最后点击“保存”。

2. 导出为数据库表格:如果需要将Excel数据导入到数据库中,可以使用导出为数据库表格的方法。

具体操作步骤为:选定要导出的数据区域或者整个工作簿,选择“数据”选项卡,点击“导出到数据库”按钮,在弹出窗口中选择数据库类型、服务器名称、身份验证方式等参数,最后点击“确定”。

C#数据导入导出Excel文件及winForm导出Execl总结

C#数据导入导出Excel文件及winForm导出Execl总结

C#数据导⼊导出Excel⽂件及winForm导出Execl总结在中导出Execl有两种⽅法,⼀种是将导出的⽂件存放在服务器某个⽂件夹下⾯,然后将⽂件地址输出在浏览器上;⼀种是将⽂件直接将⽂件输出流写给浏览器。

在Response输出时,\t分隔的数据,导出execl时,等价于分列,\n等价于换⾏。

此法将html中所有的内容,如按钮,表格,图⽚等全部输出到Execl中。

复制代码代码如下:Response.Clear();Response.Buffer= true;Response.AppendHeader("Content-Disposition","attachment;filename="+DateTime.Now.ToString("yyyyMMdd")+".xls");Response.ContentEncoding=System.Text.Encoding.UTF8;Response.ContentType = "application/vnd.ms-excel";this.EnableViewState = false;这⾥我们利⽤了ContentType属性,它默认的属性为text/html,这时将输出为超⽂本,即我们常见的⽹页格式到客户端,如果改为ms-excel将将输出excel格式,也就是说以电⼦表格的格式输出到客户端,这时浏览器将提⽰你下载保存。

ContentType的属性还包括:image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword 。

同理,我们也可以输出(导出)图⽚、word⽂档等。

下⾯的⽅法,也均⽤了这个属性。

上述⽅法虽然实现了导出的功能,但同时把按钮、分页框等html中的所有输出信息导了进去。

⽽我们⼀般要导出的是数据,DataGrid控件上的数据。

winform编程excel表格的导出

winform编程excel表格的导出

winform编程excel表格的导出方法private void ExportExcel(string filename, DataGridView myDGV){string saveFileName = "";SaveFileDialog saveDialog = new SaveFileDialog();saveDialog.DefaultExt = "xls";saveDialog.Filter = "Excel文件|*.xls";saveDialog.FileName = filename;saveDialog.ShowDialog();saveFileName = saveDialog.FileName;if (saveFileName.IndexOf(":") < 0)return;Microsoft.Office.Interop.Excel.Application xlapp = new Microsoft.Office.Interop.Excel.Application();if (xlapp == null){MessageBox.Show("无法创建", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);return;}Microsoft.Office.Interop.Excel.Workbooks workbooks = xlapp.Workbooks;Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xl WBATWorksheet);Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];string[] array = new string[myDGV.ColumnCount];//获取Visble =true 的列foreach (DataGridViewColumn column in myDGV.Columns) {if (column.Visible == true){array[column.DisplayIndex] = column.HeaderT ext + '|' + /doc/b99910403.html,;}}int RowsCount = myDGV.Rows.Count;int ColumnsCount = array.Length;int mm = 1;for (int i = 0; i < ColumnsCount; i++){string[] str = new string[2];string ColumnName;try{str = array.GetValue(i).ToString().Split('|');ColumnName = str[0];}catch{continue;//导出列名}worksheet.Cells[1, mm] = ColumnName;//导出列内容for (int m = 0; m < RowsCount; m++){try{worksheet.Cells[m+2, mm] = myDGV.Rows[m].Cells[str[1]].FormattedValue.ToString();}catch{ }}//执行完一列 mm++mm++;}worksheet.Columns.EntireColumn.AutoFit();if (saveFileName != ""){try{workbook.Saved = true;workbook.SaveCopyAs(saveFileName);}catch (Exception ex){MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);}}xlapp.Quit();GC.Collect();MessageBox.Show(filename + "的表格资料保存成功", "提示",MessageBoxButtons.OK, MessageBoxIcon.Asterisk);}按钮private void btnExcelport(object sender, EventArgs e){if (dataGridView1. Rows.Count > 0){ExportExcel(DateTime.Now.ToLongDateString().ToString() , dataGridView1);//以当前时间命名excel表格}else{MessageBox.Show("没有数据可导出,请先查询数据!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);}}。

C#Winform实现导入和导出Excel文件

C#Winform实现导入和导出Excel文件

C#Winform实现导⼊和导出Excel⽂件本⽂实例为⼤家分享了Winform实现导⼊导出Excel⽂件的具体代码,供⼤家参考,具体内容如下/// <summary>/// 导出Excel⽂件/// </summary>/// /// <param name="dataSet"></param>/// <param name="dataTable">数据集</param>/// <param name="isShowExcle">导出后是否打开⽂件</param>/// <returns></returns>public static bool DataTableToExcel(string filePath, System.Data.DataTable dataTable, bool isShowExcle){//System.Data.DataTable dataTable = dataSet.Tables[0];int rowNumber = dataTable.Rows.Count;int columnNumber = dataTable.Columns.Count;int colIndex = 0;if (rowNumber == 0){return false;}Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];excel.Visible = isShowExcle;Microsoft.Office.Interop.Excel.Range range;foreach (DataColumn col in dataTable.Columns){colIndex++;excel.Cells[1, colIndex] = col.ColumnName;}object[,] objData = new object[rowNumber, columnNumber];for (int r = 0; r < rowNumber; r++){for (int c = 0; c < columnNumber; c++){objData[r, c] =dataTable.Rows[r][c];}}range = worksheet.get_Range(excel.Cells[2, 1], excel.Cells[rowNumber + 1, columnNumber]);range.Value2 = objData;range.NumberFormatLocal = "@";worksheet.SaveAs(filePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); //excel.Quit();return true;}读取Excel⽂件数据到DataTable/// <summary>/// 读取Excel⽂件数据到DataTable/// </summary>/// <param name="filePath">Excel⽂件路径</param>private void Import_Excel(string filePath){string sqlconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=False;IMEX=1'";string sql = @"select * from [Sheet1$]";try{using (OleDbConnection conn = new OleDbConnection(sqlconn)){using (OleDbDataAdapter adapter = new OleDbDataAdapter(sql, conn)){System.Data.DataTable dt = new System.Data.DataTable();adapter.Fill(dt);this.LoadDataGridView(dt);}}}catch (Exception ex){MessageBox.Show("打开⽂件出错,错误信息:" + ex.Message.ToString(), "提⽰");}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

Winform导出Excel的列格式设置

Winform导出Excel的列格式设置

Winform导出Excel的列格式设置最近,在做winform项目中遇到了将数据添加到excle中,其中也涉及到数据的格式问题,在网上搜索了一番,找到一编解决的文章,特保存下来,以备不时之需。

Winform导出Excel的列格式设置在项目中一般都需要将报表数据导出到EXCEL中,但经常出现导出长串数据(如身份证)到EXCEL中后显示为科学计数法的格式,或者报表中显示为001的数据导出到Excel后成了1的格式。

下面简单介绍一下以上问题的解决方法:protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e){if (e.Row.RowType == DataControlRowType.DataRow)e.Row.Cells[1].Attributes.Add("style", "vnd.ms-excel.numberformat:@");}1、首先,了解一下excel从web页面上导出的原理。

当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果cell没有规定的格式,则excel会以默认的格式去呈现该cell的数据。

这样就给我们提供了自定义数据格式的空间,当然我们必须使用excel支持的格式。

下面就列出常用的一些格式:1)文本:vnd.ms-excel.numberformat:@2)日期:vnd.ms-excel.numberformat:yyyy/mm/dd3)数字:vnd.ms-excel.numberformat:#,##0.004)货币:vnd.ms-excel.numberformat:¥#,##0.005)百分比:vnd.ms-excel.numberformat: #0.00%方法2:m_objSheet.get_Range("A2",m_objExcel.Cells[nCountRow+1,1]).NumberFormat = "@";m_objSheet.get_Range("A2",m_objExcel.Cells[nCountRow+1,1]).NumberFormat = "00000";这种方法看似可以,但是点击单元格,还是int型。

winform导入excel

winform导入excel

winform导⼊excelwinfrom导⼊excel内容,要求能够excel中多个⼯作簿的内容。

代码如下:#region导⼊excel数据private void button2_Click(object sender, EventArgs e){OpenFileDialog openFileDialog = new OpenFileDialog();openFileDialog.Filter = "表格⽂件 (*.xls)|*.xls";openFileDialog.RestoreDirectory = true;openFileDialog.FilterIndex = 1;if (openFileDialog.ShowDialog() == DialogResult.OK){Import(openFileDialog.FileName);}}///<summary>///导⼊excel数据///</summary>///<param name="filePath"></param>///<returns></returns>public static bool Import(string filePath){try{//Excel就好⽐⼀个数据源⼀般使⽤//这⾥可以根据判断excel⽂件是03的还是07的,然后写相应的连接字符串string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePath + ";" + "Extended Properties=Excel 8.0;";OleDbConnection con = new OleDbConnection(strConn);con.Open();string[] names = GetExcelSheetNames(con);if (names.Length > 0){foreach (string name in names){OleDbCommand cmd = con.CreateCommand();mandText = string.Format(" select * from [{0}]", name);//[sheetName]要如此格式OleDbDataReader odr = cmd.ExecuteReader();while (odr.Read()){if (odr[0].ToString() == "序号")//过滤列头按你的实际Excel⽂件continue;//数据库添加操作/*进⾏⾮法值的判断* 添加数据到数据表中* 添加数据时引⽤事物机制,避免部分数据提交* Add(odr[1].ToString(), odr[2].ToString(), odr[3].ToString());//数据库添加操作,Add⽅法⾃⼰写的* */}odr.Close();}}return true;}catch (Exception){return false;}}///<summary>///查询表名///</summary>///<param name="con"></param>///<returns></returns>public static string[] GetExcelSheetNames(OleDbConnection con){try{System.Data.DataTable dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new[] { null, null, null, "Table" });//检索Excel的架构信息var sheet = new string[dt.Rows.Count];for (int i = 0, j = dt.Rows.Count; i < j; i++){//获取的SheetName是带了$的sheet[i] = dt.Rows[i]["TABLE_NAME"].ToString();}return sheet;}catch{return null;}}//下⾯这种⽅法获取excel Worksheets Name时,提⽰⽆法访问该exceL⽂件,所以改为上⾯获取⼯作簿名的⽅式///// <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;// }// return names;//}#endregion。

Winform开发框架之通用数据导入导出操作的事务性操作完善

Winform开发框架之通用数据导入导出操作的事务性操作完善

Winform开发框架之通⽤数据导⼊导出操作的事务性操作完善1、通⽤数据导⼊导出操作模块回顾在我的Winfrom开发框架⾥⾯,有⼀个通⽤的导⼊模块,它在默默处理这把规范的Excel数据导⼊到不同的对象表⾥⾯,⼀直⽤它来快速完成数据导⼊的⼯作。

很早在随笔《》⾥⾯就很全⾯的介绍过它的相关功能了,在代码⽣成⼯具Database2Sharp⾥⾯,⽣成的Winfrom界⾯代码也已经把它的调⽤代码放进去了,因此使⽤起来真是很好,很开⼼。

在不断的项⽬实践中,发现使⽤基于Sqlite的客户端作为单机版的操作也越来越多,因此⼤批量的数据导⼊,也是经常碰到的事情,我们知道,SqlServer批量插⼊数据会很快,即使你没有使⽤事务,⼀条条的插⼊,⼤批量也会⽐较快,这个可能得益于SqlServer本⾝的事务优化效果。

但是作为单机版的数据库,Sqlite每次操作都是单独⼀个事务的,插⼊⼀条数据效率可能不明显,如果操作⼀千条,⼀万条,数据的缓慢就很明显,甚⾄不可忍耐了。

我曾经在《》⾥⾯提到了批量插⼊通⽤字典模块的字典数据,使⽤事务前后批量插⼊数据,那个速度可是差别很⼤。

基于以上的因素考虑,决定对通⽤的数据导⼊模块进⾏事务性的优化,以便适应我频繁使⽤Sqlite数据库⼤批量导⼊数据的情况,提⾼客户的良好体验。

本篇主要基于事务性操作的完善,实现基于Sqlite数据的批量快速导⼊操作。

2、事务性代理事件的定义由于是通⽤的模块,所以我们不知道具体的数据库事务对象,但是我们能够通过定义⼀些事件,给调⽤者进⾏事务对象的传递,这样才能在基类中使⽤事务对象,⾸先我们定义两个委托事件,⼀个是SaveDataHandler,⽤来进⾏单条数据的处理委托,⼀个是CreateTransactionHandler,让调⽤者创建并传递事务对象的委托,具体代码如下所⽰。

public partial class FrmImportExcelData : BaseForm{...............................private DbTransaction transaction = null;///<summary>///使⽤事务对数据进⾏保存的委托,加快速度///</summary>///<param name="dr">数据⾏</param>///<param name="trans">事务对象</param>///<returns></returns>public delegate bool SaveDataHandler(DataRow dr, DbTransaction trans);///<summary>///创建事务对象的委托,在导⼊操作初始化的时候赋值///</summary>///<returns></returns>public delegate DbTransaction CreateTransactionHandler();定义好委托后,我们需要创建对应委托的事件对象,作为通⽤模块的事件,如下所⽰。

使用C#在Winform中操作Excel过程概叙

使用C#在Winform中操作Excel过程概叙

使⽤C#在Winform中操作Excel过程概叙最近因为朋友需要做到⼀个从DataGridView中导⼊导出数据⾄Excel的功能,向我求解,就做了⼀个⼩案例,⽤以演⽰常规的通过程序向本地Excel⽂件写⼊读出的功能.在这过程中,出现了⼀些问题,尝试了多种⽹上朋友们的资料中介绍的⽅法.有过问题,有解决了的,也有没有解决的.在这⾥,将案例操作过程写下来,并附上源⽂件.希望对需要学习的朋友有帮助.⾸先,根据OO思想,我们在操作Excel时候需要明⽩你要操作的这个对象是什么样的.这样才能更好的理解和进⾏程序设计.使⽤Excel对象进⾏操作的.所以需要引⽤程序⽂件:Microsoft.Office.Interop.Excel.版本是:12.0.0.0,运⾏库版本v1.1.4322我机器上装的是ProfessionalPlus 2010Beta,⼀般安装office之后就会⾃动将程序集集成到Visual Studio2008的项⽬安装⽬录Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office12下.在操作过程中我们需要⽤到的⼏个类.⾸先是:Excel.Application ClassMicrosoft.Office.Interop.Excel.ApplicationMicrosoft.Office.Interop.Excel.ApplicationClass(继承⾃Microsoft.Office.Interop.Excel.Application)这个类实例代表当前操作的ExcelMicrosoft.Office.Interop.Excel.ApplicationClass appc = new ApplicationClass();当本地Excel程序⽂件受损或意外⽆法启动时实例将为null.WorkBook ClassMicrosoft.Office.Interop.Excel.WorkBook这个类实例代表着当前操作的Excel⽂档.Microsoft.Office.Interop.Excel.Workbook wb =appc.Application.Workbooks.Open(strFileName, missing, false, missing, missing, missing, missing, missing, missing, true, missing, missing, missing, missing, missing);它的构造函数参数多达15个,当然,我们创建时候⼤多是⽆需使⽤到.即⽤缺失值填补:object missing = System.Reflection.Missing.Value;同样可以这样创建:Workbook wb = appc.Workbooks.Add(true);WorkSheet ClassMicrosoft.Office.Interop.Excel.SheetSheet,顾名思义,即是⽂档中的页,类实例代表当前操作的⽂档页Microsoft.Office.Interop.Excel.Worksheet ws =(Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.get_Item(1);Worksheet ws = wb.Sheets[1] as Worksheet;构造实例的⽅式同样有多种.Range ClassMicrosoft.Office.Interop.Excel.Range操作范围,页中某⼀区域.我写的这个案例主要是操作⽂档第⼀页中的内容,即⽤到最多的就是这个.未免⼤家有些模糊,我先向⼤家介绍下将会⽤到的⼀个对象⼆维数组.object[,]即我们通常所使⽤的表.object[,] objData = new object[n,m];这样就创建了⼀个⽤以存储n*m个object对象的⼆维数组对象.也可以说是n⾏m列的表格.⽽Range对象,则代表着Excel页整个表格的某⼀区域.我们得到区域对象的⽅法Range rng = ws.get_Range(appc.Cells[1, 1], appc.Cells[1,5]);这样即得到了当前页中的第⼀⾏的第⼀到第五个单元格然后是Range对象的Merge⽅法,合并区域中的单元格rng.Merge(true);范围中的值rng.Value22我想即是⼆维的意思.最后则是保存⽅法wb.SaveAs(savePath,missing, missing, missing,false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,missing, missing, missing, missing, missing);保存当前⽂档.我第⼀次做这样的案例,⽹上的资料参照占据了代码的绝⼤部分.程序设计是⼀件需要⼤量思考的事情,因为程序充满了各种可能性.更多的需要去理解你所做的事情,你要做的事情,你需要使⽤的⼀些事物,需要考虑的⼀些情况,这些都是不可复制的.但是⼜都是有共通性的.所谓理解的越多,需要记忆的就越少.在这⾥贴出程序代码:using System.Text;using System.Windows.Forms;using Microsoft.Office.Interop.Excel;//要求格式// 盘点表名称// 数据库⽹格表//部门领导签字:盘点⼈签字:object missing = System.Reflection.Missing.Value;int colCount = 10;string[,] objData = new string[1, 1];Microsoft.Office.Interop.Excel.Application appc = new Microsoft.Office.Interop.Excel.ApplicationClass();if (appc == null){MessageBox.Show("⽆法启动Excel");return;}Workbook wb = appc.Workbooks.Add(true);Worksheet ws = wb.Sheets[1] as Worksheet;Range rng = ws.get_Range(appc.Cells[1, 1], appc.Cells[1, colCount]); //取得单元格,从第⼀⾏第⼀格,到第⼀⾏第colCount格 rng.Merge(true); //合并范围中的单元//设置标题,操作活动的单元格,即合并的单元格appc.ActiveCell.FormulaR1C1 = "盘点表名称";appc.ActiveCell.Font.Size = 25;appc.ActiveCell.Font.Bold = true;appc.ActiveCell.HorizontalAlignment = Constants.xlCenter; //居中rng = ws.get_Range(appc.Cells[2, 1], appc.Cells[2, colCount]);rng.Merge(true);objData[0, 0] = "数据库⽹格表";rng.Value2 = objData;rng.Font.Size = 20;rng = ws.get_Range(appc.Cells[3, 1], appc.Cells[3, colCount / 2]);rng.Merge(true);objData[0, 0] = "部门领导签字:";rng.Value2 = objData;rng = ws.get_Range(appc.Cells[3, colCount / 2 + 1], appc.Cells[3, colCount]);rng.Merge(true);objData[0, 0] = "盘点⼈签字:";rng.Value2 = objData;//保存wb.SaveAs(savePath,missing, missing, missing,false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing);MessageBox.Show("写⼊成功");。

WinForm对EXCEL的操作(一)

WinForm对EXCEL的操作(一)

WinForm对EXCEL的操作(⼀)由于⼯作原因,最近对EXCEL⽂件的操作和数据导⼊导出进⾏了学习。

并把其中的⼀些常⽤⽅法总结出来,不敢私藏现在分享给⼤家。

不⾜之处,还请指正。

(⼀)获取EXCEL⽂件SHEET的名称⽅法1:View Code1public static string[] ExcelTableNames(string FileName)2 {3string strXls = FileName.Substring(stIndexOf(".")).ToLower();4string sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties=Excel 8.0";5string[] ss = "";6string temp = "'$";7using (OleDbConnection oleConn = new OleDbConnection())8 {9 oleConn.ConnectionString = sConn;10try11 {12 oleConn.Open();13 DataTable table = oleConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);14if (table == null || table.Rows.Count == 0) return ss;15 ss = new string[table.Rows.Count];16for (int i = 0; i < table.Rows.Count; ++i)17 {18 ss[i] = table.Rows[i]["Table_Name"].ToString();19// 由于如何sheet名称为中⽂字符,在获取如何shee和名称时会有$ '字符,所以使⽤了字符过滤。

winformexcel导入--自带office.interop.excel方式

winformexcel导入--自带office.interop.excel方式

winformexcel导⼊--⾃带office.interop.excel⽅式⽤npoi⽅式,遇到⼀个问题,有的excel⽤加密软件(盖章,只读等)⽣成的解析不了,所以换成⾃带的⽅式,可以解决。

需要引⽤系统⾃带Microsoft.office.interop.excelpublic Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){string f = @"D:\bkintest.xlsx";CreateExcelFile(f);WriteToExcel(f, "file2", "编号2", "姓名2");}private void CreateExcelFile(string FileName){if (File.Exists(FileName)){File.Delete(FileName);}//createobject Nothing = System.Reflection.Missing.Value;var app = new Microsoft.Office.Interop.Excel.Application();app.Visible = false;Microsoft.Office.Interop.Excel.Workbook workBook = app.Workbooks.Add(Nothing);Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workBook.Sheets[1]; = "Work";//headlineworksheet.Cells[1, 1] = "员⼯编号";worksheet.Cells[1, 2] = "姓名";worksheet.Cells[1, 3] = "A卡";worksheet.Cells[1, 4] = "B卡";worksheet.Cells[1, 5] = "开通餐卡";worksheet.Cells[1, 6] = "备注";worksheet.SaveAs(FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing); workBook.Close(false, Type.Missing, Type.Missing);app.Quit();KillExcel.Kill(new IntPtr(app.Hwnd));app = null;}private void WriteToExcel(string excelName, string filename, string findString, string replaceString){//openobject Nothing = System.Reflection.Missing.Value;var app = new Microsoft.Office.Interop.Excel.Application();app.Visible = false;Microsoft.Office.Interop.Excel.Workbook mybook = app.Workbooks.Open(excelName, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing);Microsoft.Office.Interop.Excel.Worksheet mysheet = (Microsoft.Office.Interop.Excel.Worksheet)mybook.Worksheets[1];mysheet.Activate();//get activate sheet max row countint maxrow = edRange.Rows.Count + 1;mysheet.Cells[maxrow, 1] = filename;mysheet.Cells[maxrow, 2] = findString;mysheet.Cells[maxrow, 3] = replaceString;mybook.Save();mybook.Close(false, Type.Missing, Type.Missing);mybook = null;//quit excel appapp.Quit();KillExcel.Kill(new IntPtr(app.Hwnd));app = null;}private void OpenExcel(string strFileName){object missing = System.Reflection.Missing.Value;Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();//lauch excel applicationif (excel == null){//Response.Write("<script>alert('Can't access excel')</script>");}else{excel.Visible = false; erControl = true;// 以只读的形式打开EXCEL⽂件Workbook wb = excel.Application.Workbooks.Open(strFileName, missing, false, missing, missing, missing,missing, missing, missing, true, missing, missing, missing, missing, missing);//取得第⼀个⼯作薄//Worksheet ws = (Worksheet)wb.Worksheets.get_Item(2);Worksheet ws = (Worksheet)excel.ActiveSheet;//取得总记录⾏数 (包括标题列)int rowsint = edRange.Cells.Rows.Count; //得到⾏数//int columnsint = edRange.Cells.Columns.Count;//得到列数//取得数据范围区域 (不包括标题列)Range rng1 = ws.Cells.get_Range("B2", "B" + rowsint); //itemRange rng2 = ws.Cells.get_Range("E2", "E" + rowsint); //Customerobject[,] arryItem = (object[,])rng1.Value2; //get range's valueobject[,] arryCus = (object[,])rng2.Value2;//将新值赋给⼀个数组string[,] arry = new string[rowsint - 1, 2];for (int i = 1; i <= rowsint - 1; i++){//Item_Code列//arry[i - 1, 0] = arryItem[i, 1].ToString();//Customer_Name列//arry[i - 1, 1] = arryCus[i, 1].ToString();string i1 = arryItem[i, 1] == null ? "" : arryItem[i, 1].ToString();string i2 = arryCus[i, 1] == null ? "" : arryCus[i, 1].ToString();Console.WriteLine(i1 + "--" + i2);}//Response.Write(arry[0, 0] + " / " + arry[0, 1] + "#" + arry[rowsint - 2, 0] + " / " + arry[rowsint - 2, 1]);Console.WriteLine("wb.ReadOnly--" + wb.ReadOnly);wb.Close();}excel.DisplayAlerts = false;excel.Quit();KillExcel.Kill(new IntPtr(excel.Hwnd));excel = null;////Process[] procs = Process.GetProcessesByName("excel");////foreach (Process pro in procs)////{//// pro.Kill();//没有更好的⽅法,只有杀掉进程////}}//选择excelprivate void button3_Click(object sender, EventArgs e){OpenFileDialog f = new OpenFileDialog();f.Multiselect = true;f.ShowDialog();string[] filenames = f.FileNames;if (filenames.Length > 0){bel1.Text = filenames[0];string strFile = System.IO.Path.GetFileName(filenames[0]);System.Data.DataTable dt = GetDataBySQLNew("McsDW", "select 1 from [McsDW].[dbo].[UserGateWayNumber] where ExcelFileName='" + strFile + "'");if (dt != null){if (dt.Rows.Count > 0){MessageBox.Show("数据库⾥已经导⼊名称为 " + strFile + " 的excel表,请核对!");bel1.Text = "";}}}}//对⽐数据private void button2_Click(object sender, EventArgs e){if (bel1.Text.Length < 1){MessageBox.Show("请先选择excel⽂件!");return;}string sheetIndex = texBoxSheet.Text;int sheetInt = 1;int.TryParse(sheetIndex, out sheetInt);if (sheetInt < 1){MessageBox.Show("sheet序号请填写整数!");return;}ReadFromExcelFile(bel1.Text, sheetInt);}private void ReadFromExcelFile(string filePath, int sheetInt){string extension = System.IO.Path.GetExtension(filePath);try{object missing = System.Reflection.Missing.Value;Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();//lauch excel applicationif (excel == null){//Response.Write("<script>alert('Can't access excel')</script>");}else{excel.Visible = false; erControl = true;// 以只读的形式打开EXCEL⽂件Workbook wb = excel.Application.Workbooks.Open(filePath, missing, false, missing, missing, missing,missing, missing, missing, true, missing, missing, missing, missing, missing);//取得第⼀个⼯作薄//Worksheet ws = (Worksheet)wb.Worksheets.get_Item(2);Worksheet ws = (Worksheet)excel.ActiveSheet;//取得总记录⾏数 (包括标题列)int rowsint = edRange.Cells.Rows.Count; //得到⾏数//int columnsint = edRange.Cells.Columns.Count;//得到列数//取得数据范围区域 (不包括标题列)Range rngxuhao = ws.Cells.get_Range("A3", "A" + rowsint);Range rngdanwei = ws.Cells.get_Range("B3", "B" + rowsint);Range rngbumen = ws.Cells.get_Range("C3", "C" + rowsint);Range rngbianhao = ws.Cells.get_Range("D3", "D" + rowsint);Range rngname = ws.Cells.get_Range("E3", "E" + rowsint);Range rngAka = ws.Cells.get_Range("F3", "F" + rowsint);Range rngBka = ws.Cells.get_Range("G3", "G" + rowsint);Range rngkai = ws.Cells.get_Range("H3", "H" + rowsint);object[,] arryxuhao = (object[,])rngxuhao.Value2; //get range's valueobject[,] arrydanwei = (object[,])rngdanwei.Value2;object[,] arrybumen = (object[,])rngbumen.Value2;object[,] arrybianhao = (object[,])rngbianhao.Value2;object[,] arryname = (object[,])rngname.Value2;object[,] arryAka = (object[,])rngAka.Value2;object[,] arryBka = (object[,])rngBka.Value2;object[,] arrykai = (object[,])rngkai.Value2;//将新值赋给⼀个数组string[,] arry = new string[rowsint - 1, 2];string userCount = "";Dictionary<string, List<string>> userDic = new Dictionary<string, List<string>>();for (int i = 1; i <= rowsint - 1; i++){//Item_Code列//arry[i - 1, 0] = arryItem[i, 1].ToString();//Customer_Name列//arry[i - 1, 1] = arryCus[i, 1].ToString();string iA = arryxuhao[i, 1] == null ? "" : arryxuhao[i, 1].ToString();string iB = arrydanwei[i, 1] == null ? "" : arrydanwei[i, 1].ToString();string iC = arrybumen[i, 1] == null ? "" : arrybumen[i, 1].ToString();string iD = arrybianhao[i, 1] == null ? "" : arrybianhao[i, 1].ToString();string iE = arryname[i, 1] == null ? "" : arryname[i, 1].ToString();string iF = arryAka[i, 1] == null ? "" : arryAka[i, 1].ToString();string iG = arryBka[i, 1] == null ? "" : arryBka[i, 1].ToString();string iH = arrykai[i, 1] == null ? "" : arrykai[i, 1].ToString();if (iA.Contains("计数")){int uxuhaoInt = 0;int.TryParse(iH, out uxuhaoInt);userCount = uxuhaoInt.ToString();}if (iA.Equals("") || iA.Equals("序号")){continue;}if (iD.Equals("")){continue;}if (iA.Contains("计数") || iA.Contains("负责⼈") || iA.Contains("开通餐卡")){break;}List<string> ulist = new List<string>();ulist.Add(iB);ulist.Add(iC);ulist.Add(iE);ulist.Add(iH);ulist.Add(iF);ulist.Add(iG);userDic.Add(iD, ulist);Console.WriteLine(iA + "--" + iB + "--" + iC + "--" + iD + "--" + iE + "--" + iF + "--" + iG + "--" + iH);}//Response.Write(arry[0, 0] + " / " + arry[0, 1] + "#" + arry[rowsint - 2, 0] + " / " + arry[rowsint - 2, 1]);Console.WriteLine("wb.ReadOnly--" + wb.ReadOnly);wb.Close();if (userCount.Equals("") && userCount.Equals("0"))userCount = "没有计数";DoUser(userDic, filePath, userCount, sheetInt);}excel.DisplayAlerts = false;excel.Quit();KillExcel.Kill(new IntPtr(excel.Hwnd));excel = null;}catch (Exception e){//只在Debug模式下才输出Console.WriteLine(e.Message);MessageBox.Show(e.Message);}}private void DoUser(Dictionary<string, List<string>> userDic, string filePath, string userCount, int sheetInt){if (userDic.Count < 1)return;string namev = "";string tip = "";System.Data.DataTable dtNew = new System.Data.DataTable();try{//System.Data.DataTable dt = GetDataBySQLNew("McsDW", "select * from UserViewAll_DW ");dtNew.Columns.Add("员⼯编号", Type.GetType("System.String"));dtNew.Columns.Add("姓名", Type.GetType("System.String"));dtNew.Columns.Add("A卡", Type.GetType("System.String"));dtNew.Columns.Add("B卡", Type.GetType("System.String"));dtNew.Columns.Add("开通餐卡", Type.GetType("System.String"));dtNew.Columns.Add("备注", Type.GetType("System.String"));string sql = "", sqlabnull = "";string remark = "";int passCount = 0;System.Data.DataTable dtNewABNull = dtNew.Clone();foreach (var d in userDic){//Console.Write(d.Key+"----"+d.Value);//Console.WriteLine("\n");//namev = d.Value;remark = "";bool isExcel = false;DataRow[] rows = dt.Select("PostionLevel='" + d.Key + "'");//if (d.Value[3].Trim().Equals("否"))// continue;//开通餐卡为空,默认为不开通if (d.Value[3].Trim().Equals("")){//Console.WriteLine(d.Key + "----" + d.Value + "----开通餐卡为空");//isExcel = true;//remark = "开通餐卡为空!";continue;}//开通餐卡,填的不是A,Bif (!(d.Value[3].Trim().ToUpper().Equals("A") || d.Value[3].Trim().ToUpper().Equals("B"))){isExcel = true;remark += "开通餐卡项填写错误,填的不是A,B";}//如果开通A卡但是A卡为空,B卡不为空,也提⽰else if (d.Value[3].Trim().ToUpper().Equals("A") && d.Value[4].Trim().Equals("") && !d.Value[5].Trim().Equals("")) {isExcel = true;remark += "需要开通A卡但是A卡为空,B卡不为空,请填B卡";}//如果开通B卡但是B卡为空,A卡不为空,也提⽰else if (d.Value[3].Trim().ToUpper().Equals("B") && d.Value[5].Trim().Equals("") && !d.Value[4].Trim().Equals("")) {isExcel = true;remark += "需要开通B卡但是B卡为空,A卡不为空,请填A卡";}else if (rows == null){isExcel = true;remark += "数据库为空";}else if (rows.Length < 1){isExcel = true;remark += "数据库找不到该⽤户";}else{//判断⽤户名,中⽂名字if (!(d.Value[2].Trim().Equals(rows[0]["UserDisplayName"].ToString().Trim()))){isExcel = true;remark += "数据库⾥该⽤户名不匹配:" + rows[0]["UserDisplayName"].ToString();}//如果开通A卡,判断A卡和数据库是否匹配if (d.Value[3].Trim().ToUpper().Equals("A") && !(d.Value[4].Trim().Equals(rows[0]["GatewayNumber"].ToString().Trim()))){isExcel = true;remark += "开通A卡,但数据库⾥该⽤户A卡不匹配:" + rows[0]["GatewayNumber"].ToString();}//如果开通B卡,判断B卡和数据库是否匹配if (d.Value[3].Trim().ToUpper().Equals("B") && !(d.Value[5].Trim().Equals(rows[0]["GatewayNumber2"].ToString().Trim()))){isExcel = true;remark += "开通B卡,但数据库⾥该⽤户B卡不匹配:" + rows[0]["GatewayNumber2"].ToString();}//string kastr = GetKa(rows[0]["GatewayNumber2"], rows[0]["GatewayNumber"]);//if (kastr.Equals("") || kastr.Equals("没有卡号"))//{// isExcel = true;// remark += "数据库⾥该⽤户卡号有误:" + kastr;//}}string Gender = GetGender(d.Key);//如果A卡和B卡都为空,也提⽰if (d.Value[4].Trim().Equals("") && d.Value[5].Trim().Equals("")){string abnull = "A,B卡都为空,请尽快启动办卡流程";dtNewABNull.Rows.Add(new object[] { d.Key, d.Value[2], d.Value[4], d.Value[5], d.Value[3], abnull });sqlabnull += string.Format(" insert into UserGateWayNumberABNull(UnitName,DepartmentName,PostionLevel,UserName,GatewayNumber,ExcelFileName,AorBcard,Remark,Gender) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}') d.Value[0], d.Value[1], d.Key, d.Value[2], "", System.IO.Path.GetFileName(filePath), d.Value[3], abnull, Gender);passCount++;continue;}if (isExcel){DataRow r = dtNew.NewRow();r["员⼯编号"] = d.Key;r["姓名"] = d.Value[2];r["A卡"] = d.Value[4];r["B卡"] = d.Value[5];r["开通餐卡"] = d.Value[3];r["备注"] = remark;dtNew.Rows.Add(r);}else{string gNum = "";if (d.Value[3].Trim().ToUpper().Equals("A"))gNum = d.Value[4];elsegNum = d.Value[5];sql += string.Format(" insert into UserGateWayNumber(UnitName,DepartmentName,PostionLevel,UserName,GatewayNumber,ExcelFileName,AorBcard,Gender) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}')",d.Value[0], d.Value[1], d.Key, d.Value[2], gNum, System.IO.Path.GetFileName(filePath), d.Value[3], Gender);passCount++;}}int ucount = 0;int.TryParse(userCount, out ucount);if (dtNew.Rows.Count > 0){//DataRow r = dtNew.NewRow();//r["员⼯编号"] = filePath;//r["姓名"] = "";//r["A卡"] = "";//r["B卡"] = "";//r["开通餐卡"] = "";//r["备注"] = "";//dtNew.Rows.Add(r);//加⼊AB都为空的⽤户foreach (DataRow ro in dtNewABNull.Rows){dtNew.Rows.Add(ro.ItemArray);}//加⼊excel名dtNew.Rows.Add(new object[] { filePath, "", "", "", "", "" });DataTableToExcel2(dtNew);tip = "总共处理了" + userDic.Count + "条数据,其中异常的有" + (dtNew.Rows.Count - 1).ToString() + "条。

C#winform开发之Excel操作

C#winform开发之Excel操作

C#winform开发之Excel操作C# winform 开发之Excel操作(一)------打开Exce表在开始之前,先要导入Excel的类库。

步骤如下:把鼠标移动解决方案---->右击----->选择“添加引用”---->会出现一个对话框---->选择标题为.net的页面----->然后选择“Microsoft.Office.Interop.Excel”----->单击确定就可以。

之后,你会在解决方案中的引用文件夹中看到名为“Microsoft.Office.Interop.Excel”的组件。

好了,添加了这个引用,自然下一步是在程序中添加它的命名空间,如下:using Microsoft.Office.Interop.Excel;或者using Excel;这里要声明一下,以上引用方式,并不是所有电脑都适用的。

至少,我的不行,呵呵。

所以,下面我介绍第三种引用方法:Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); //引用Excel对象即在你要用的地方时候,写上它的命名空间。

下面轮到,实战了。

代码如下:/// <summary>/// 查看Excel表格/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button9_Click(object sender, EventArgs e){Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); //引用Excel对象Microsoft.Office.Interop.Excel.Workbook wBook = excel.Application.Workbooks.Add(strpath); //引用Excel工作簿excel.Visible = true; //使Excel可视。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

return;
}
string filepath=txtpath.Text;
SqlConnection conn =new SqlConnection(strcon);//链接数据库
winform实现Excel表格导入Sql数据库示例
winform实现Excel表格导入Sql数据库示例,首先要保证的是将要导入数据库的excel表格中的数据和数据库字段相符,excel中不能存在数据表中不存在的字段。获取excel文档完整路径,并将其中的数据生成dataset对象:
private DataSet xsldata(string filepath)
DateTime stdt = Convert.ToDateTime(ds.Tables[0].Rows[i][4].ToString());
string cardstate= ds.Tables[0].Rows[i][5].ToString();
string strCom = "SELECT * FROM [Sheet1$]";
Conn.Open();
System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, Conn);
conn.Open();
try
{
DataSet ds = new DataSet();
//取得数据集
//调用上面的函数
ds = xsldata(filepath);
{
if(txtpath.Text=="")
{
MessageBox.Show("请选择要导入的Excel文档!","系统提示",MessageBoxButtons.OK,rmation);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
int cardtypeid = Convert.ToInt32(ds.Tables[0].Rows[i][0].ToString());
}
else
{
SqlCommand insertcmd= new SqlCommand("insert into cardsinfo(TypeID,CardNum,CardPwd,OutByOffID,CardTime,CardState,CardByUser) values(" + cardtypeid + ",'" +
insertcmd.ExecuteNonQuery();
insertcount++;
}
}
string cardnum = ds.Tables[0].Rows[i][1].ToString();
string cardpwd = ds.Tables[0].Rows[i][2].ToString();
int officeid = Convert.ToInt32(ds.Tables[0].Rows[i][3].ToString());
else
{
//MessageBox.Show("电子表格信息有错!");
errorcount++;
;
}
}
MessageBox.Show( insertcount + "条数据导入成功!" + updatecount + "条数据重复!" + errorcount + "条数据部分信息为空没有导入!");
return ds;
}
完成之后把dataset对象导入数据库中,这里说明一下excel的头一行系统会默认为列名,不对其做导入操作,所以最好做个处理,这里我添加了列名。
private void button1_Click(object sender, EventArgs e)
{
SqlCommand selectcmd = new SqlCommand("select count(*) from cardsinfo where CardNum='" + cardnum + "'and CardPwd='" + cardpwd + "' and CardState='1' and TypeID="+cardtypeid, conn);
{
string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties='Excel 8.0;IMEX=1'";
System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection(strCon);
//dataGridView2.DataSource = ds.Tables[0];
int errorcount = 0;//记录错误信息条数
int insertcount = 0;//记录插入成功条数
int updatecount = 0;//记录更新信息条数
}
}
这样简单的excel电子表格导入数据库就完成了
WinForm下DataGridView导出Excel实现方法
1.说明:导出的效率说不上很高,但至少是可以接收的.参考网上很多高效导出Excel的方法,实现到时能够实现的,导出速度也很快,不过缺陷在与 不能很好的进行单元格的格式化,比如上图中的"拼音码"字段中的值"000000000012120",在导出后就显示"12120",挺郁闷 的!o(∩_∩)o,废话不说了,进入正题.......
int userid=Convert.ToInt32(ds.Tables[0].Rows[i][6].ToString());
if (cardtypeid != 0 && cardnum != "" && cardpwd != "" && userid != 0 )
cardnum + "','" + cardpwd + "'," + officeid + ",'" + stdt+ "','1',"+userid+")", conn);
// 列索引,行索引,总列数,总行数
int ColIndex = 0;
int RowIndex = 0;
int ColCount = myDGV.ColumnCount;
int RowCount = myDGV.RowCount;
if (== 0)
{
result = 1;
2.首先添加Excel引用
3.实现代码
/// <summary>
/// DataGridView导出Excel
/// </summary>
/// <param name="strCaption">Excel文件中的标题</param>
/// <param name="myDGV">DataGridView 控件</param>
}
try
{
// 创建Excel工作薄
Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
Microsoft.Office.Interop.Excel.Worksheet xlSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlBook.Worksheets[1];
}
// 创建Excel对象
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
if (xlApp == null)
{
result = 2;
/// <returns>0:成功;1ataGridView中无记录;2:Excel无法启动;9999:异常错 误</returns>
private int ExportExcel(string strCaption, DataGridView myDGV)
{
int result = 9999;
int count = Convert.ToInt32(selectcmd.ExecuteScalar());
相关文档
最新文档