using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OleDb;
using System.Data;
using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
using System.IO;
using System.Windows.Forms;
namespace ExportTest
{
/// <summary>
/// 将数据表格导出到excel中,可以同时添加图片
/// </summary>
public class ExportExcel
{
/// <summary>
/// 导出所需时间(秒)
/// </summary>
public static string Second = "0";
/// <summary>
/// 将表格列表中的各表格导入到指定文件的excel中
/// </summary>
/// <param name="ldt">表格列表</param>
/// <param name="fileName">导出到的excel文件名</param>
/// <param name="picName">要导出的图片文件全名</param>
public static void DataTableToExcel(List<DataTable> ldt, string fileName, string picName)
{
#region 导出表格数据
if (File.Exists(fileName))
{
File.Delete(fileName);
}
DateTime dt1 = System.DateTime.Now;
Microsoft.Office.Interop.Excel.Application appd = new Microsoft.Office.Interop.Excel.ApplicationClass();
if (appd == null)
{
throw new Exception("请先安装Excel!");
}
else
{
appd.Quit();
ReleaseObj(appd);
}
string connectionS = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileName + ";Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(connectionS);
OleDbCommand oleCommand = conn.CreateCommand();
try
{
conn.Open();
for (int lcount = 0; lcount < ldt.Count; lcount++)
{
DataTable dt = ldt[lcount];
string dtName = dt.TableName;
if (dt.TableName == "")
{
dtName = "Table1";
}
//添加表格模板sql语句
string createTableSql = "CREATE TABLE ";
createTableSql += dtName;
createTableSql += "(";
//添加数据
string insertSql = "INSERT INTO ";
insertSql += dtName;
insertSql += " values(";
if (dt.Columns.Count > 0)
{
for (int c = 0; c < dt.Columns.Count; c++)
{
createTableSql += dt.Columns[c].ColumnName + " varchar,";
insertSql += "@" + dt.Columns[c].ColumnName + ",";
}
createTableSql = createTableSql.Trim(',');
createTableSql += ")";
insertSql = insertSql.Trim(',');
insertSql += ")";
oleCommand.CommandText = createTableSql;
oleCommand.ExecuteNonQuery();
}
//插入语句
oleCommand.CommandText = insertSql;
//数据导入表格模板
if (dt != null && dt.Rows.Count > 0)
{
int count = dt.Rows.Count;
for (int i = 0; i < count; i++)
{
oleCommand.Parameters.Clear();
for (int c = 0; c < dt.Columns.Count; c++)
{
oleCommand.Parameters.Add(new OleDbParameter("@" + dt.Columns[c].ColumnName, dt.Rows[i][c].ToString()));
}
oleCommand.ExecuteNonQuery();
}
}
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
}
#endregion
DateTime dt2 = System.DateTime.Now;
Comp(dt1, dt2);
object o = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
//打开excel文件
Microsoft.Office.Interop.Excel.Workbook newWorkbook = app.Workbooks.Open(fileName, o, o, o, o, o, o, o, o, o, o, o, o, o, o);
//打开工作薄
Excel.Worksheet newWorksheet;
newWorksheet = (Excel.Worksheet)newWorkbook.Worksheets[1];
//.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value);
//添加图片
newWorksheet.Shapes.AddPicture(picName, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, 100, 100, 100, 100);
//释放资源
ReleaseObj(newWorksheet);
//关闭工作薄
newWorkbook.Close(true, o, o);
//推出excel
app.Quit();
//释放资源
ReleaseObj(newWorkbook);
ReleaseObj(app);
//释放资源
Dispose();
}
/// <summary>
/// 垃圾回收
/// </summary>
public static void Dispose()
{
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
}
/// <summary>
/// 释放对象
/// </summary>
/// <param name="o"></param>
private static void ReleaseObj(object o)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
}
catch { }
finally { o = null; }
}
/// <summary>
/// 比较时间之间的秒数
/// </summary>
/// <param name="dt1">开始时间</param>
/// <param name="dt2">结束时间</param>
public static void Comp(DateTime dt1, DateTime dt2)
{
Second = (dt2-dt1).TotalSeconds.ToString();
}
}
}
相关推荐
总结来说,C#导出Excel文件涉及选择合适的库,如EPPlus,创建Excel包,添加工作表,以及将数据写入工作表。这个过程可以适应各种数据源和数据结构,使得C#成为处理Excel文件的强大工具。在实际应用中,可以根据具体...
首先,我们来看C#导出Excel的实现。Excel文件通常以`.xlsx`或`.xls`格式存储,C#可以借助Microsoft Office Interop库直接操作Excel对象,但这要求目标机器上安装了Office。另一种更灵活且无需依赖Office的方法是使用...
标题"**C#导出Excel复杂表头解决方案**"涉及的是在C#应用程序中如何高效地创建包含复杂结构的Excel表头,这在数据报告、数据分析或自动化办公场景中非常常见。复杂表头可能包括多级标题、合并单元格、自定义样式等。...
### C#导出Excel并实现单元格合并及样式设置 #### 概述 在实际开发过程中,导出数据到Excel是常见的需求之一。而在导出过程中实现数据的合并以及字体颜色居中等功能,则是对用户体验的一种优化提升。本文将详细...
"C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法" 在导出Excel文件时,经常会遇到“文件格式与扩展名指定格式不一致”的问题,这是因为大多数人在导出Excel文件时,都是默认保存Excel的格式...
本压缩包“C#导出Excel和图形.zip”很可能包含一系列示例代码或教程,旨在帮助开发者学习如何在C#应用程序中生成Excel文件和图表。下面将详细探讨这个主题,以及相关的知识点。 1. **Excel导出**: - **NPOI库**:...
总的来说,"C#导出Excel和图形Vs2010"这个主题涵盖了使用C#编程语言在Visual Studio 2010环境下处理数据导出到Excel文件以及生成图形的基本技术。无论是通过Excel Interop还是第三方库,都可以实现高效、灵活的数据...
c#导出excel支持多sheet导出,可自定义sheetName,如有疑问请留言,或qq1574697828.c#导出excel支持多sheet导出,可自定义sheetName,如有疑问请留言。
总的来说,使用第三方控件如myxls在C#中导出Excel,不仅提高了程序的可移植性,还提供了更多自定义样式和格式的可能性。这种方式对于那些需要大量生成Excel报表,或者对Excel样式有特殊要求的项目非常实用。在实际...
总之,C#导出Excel涉及的关键技术包括选择合适的库(如EPPlus、NPOI或ClosedXML)、理解和应用库的API以及正确处理数据格式。通过熟练掌握这些知识点,你可以轻松地在C#应用程序中实现格式化的Excel导出功能。
c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#)c# 导出到Excel (C#) winform
下面我们将深入探讨C#导出Excel的原理、方法和常见实践。 首先,C#导出Excel主要有两种方式:使用Microsoft Office Interop库(需在运行环境中安装Office)或使用第三方库。前者直接操作Excel应用程序对象模型,而...
在C#编程环境中,导出Excel表格是一项常见的需求,尤其在数据处理和报告生成时。本文将详细讲解如何使用C#来实现Excel表格的导出,包括xls和xlsx两种常见格式。 首先,我们需要理解这两种格式的区别。Xls是Excel...
### C#导出Excel的代码知识点解析 #### 一、概述 在开发过程中,经常需要将数据导出到Excel文件中以便于用户查看或进一步处理。C# 提供了多种方式来实现这一功能,其中使用 ADO.NET 操作 Excel 文件是一种常见的...
C#导出Excel并关闭进程解决方案,因为项目导出EXCEL偶尔会报错,现共享解决方案。
C#操作Excel导出类,可以直接调用,兼容各个版本的Excel和WPS。
首先,要理解C#导出Excel的基本原理。通常,我们可以使用两种主要的方式来完成这个任务:一是使用Microsoft Office Interop组件,二是使用第三方库。对于Interop组件,它直接与Excel应用程序进行交互,但缺点是需要...
### C# 导出 Excel 的方法详解 在 IT 领域中,处理大量数据时经常需要将数据导出到 Excel 文件中以便于进一步分析或分享。C# 作为一种广泛使用的编程语言,提供了多种方式来实现这一功能。本文将详细介绍一种不依赖...
目前C#导出Excel主要有八种方法(https://www.cnblogs.com/Brambling/p/6854731.html), 其中NPOI个人感觉是最好的, 好不容易找到完整Dll, 做了Demo, 给需要的朋友做参考.
本教程将基于提供的"C#导出excel.rar"压缩包,详细介绍如何使用C#语言来创建和导出Excel文件,包括所需的库、基本操作以及代码实现。 首先,我们需要引入一个能够处理Excel文件的库。在C#中,最常用的是`EPPlus`库...