没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|其它|编辑:郝浩|2008-08-06 11:49:23.000|阅读 4291 次
概述:C#对Excel文件的操作
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
这里涉及到几个问题,首先,在excel转成DataTable时,如果Excel的列中每一行的数据类型不一样,转成DataTable数据会丢失,解决方法就是先将excel文件转成csv文件,但是这个是由程序来完成的,不是手动完成。如下代码:
/// <summary>
/// 将excel文件另存csv文件
/// </summary>
/// <param name="excelFileName">Excel文件路径</param>
/// <param name="csvFileName">csv文件路径</param>
public static void SaveAsExcel(string excelFileName,string csvFileName)
{
//定义一个COM中空类型的对象(作用类似于大家所熟悉的null)
object missing = System.Reflection.Missing.Value;
//创建Excel应用程序对象(会帮我们在启动Excel进程)
Excel.Application app = new Excel.ApplicationClass();
Workbook wb = app.Application.Workbooks.Open(excelFileName,missing,missing,missing,missing,missing,missing,missing,
missing,missing,missing,missing,missing,missing,missing);
//不出现提示,用默认的选择
app.Application.DisplayAlerts = false;
//不运行excel界面
app.Application.Visible = false;
Excel.Worksheet sheet = (Excel.Worksheet)wb.ActiveSheet;
try
{
//另存为csv格工,注意Excel.XlFileFormat.xlCSV参数,要另存为别的格式,也是在这里设置
sheet.SaveAs(csvFileName, Excel.XlFileFormat.xlCSV, missing, missing, false, false, false, missing, missing, false);
}
finally
{
wb.Close(false, missing, missing);
app.Quit();
}
}
当然前提条件是你要加入Mircosoft.Excel.core 11 COM组件(添加引用).
接下来,将VCS写入DataTable,这里用流写入。
/// <summary>
/// 将csv文件中的数据转成dataTabel
/// </summary>
/// <param name="path">csv路径</param>
/// <returns>DataTable</returns>
public DataTable CSVToDS(string path)
{
String line;
String[] split = null;
DataTable table = new DataTable("auto");
DataRow row = null;
StreamReader sr = new StreamReader(path,Encoding.Default);
//创建与数据源对应的数据列
line = sr.ReadLine();
split = line.Split(',');
foreach (String colname in split)
{
table.Columns.Add(colname, System.Type.GetType("System.String"));
}
//将数据填入数据表
int j = 0;
while ((line = sr.ReadLine()) != null)
{
j = 0;
row = table.NewRow();
split = line.Split(',');
foreach (String colname in split)
{
row[j] = colname;
j++;
}
table.Rows.Add(row);
}
sr.Close();
//显示数据
return table;
}
由于csv保存内容是以逗号分隔,所以在这里也要用逗号分隔。
第二个问题,创建Excel文件不符合标准。如果用File.Create()方法创建的Excel,用oleDBConnetion创建连接时,将无法创建连接,所以不能以此方法创建Excel文件。用如下方法:
/// <summary>
/// 创建excel文件
/// </summary>
/// <param name="fileName">文件名</param>
/// <param name="headerList">excel文件头</param>
public static void CreateFile(string fileName,List<string> headerList)
{
if (!File.Exists(fileName))
{
//定义一个COM中空类型的对象(作用类似于大家所熟悉的null)
object missing = System.Reflection.Missing.Value;
//创建Excel应用程序对象(会帮我们在启动Excel进程)
Excel.Application app = new Excel.ApplicationClass();
//在Excel中新建一个工作簿
app.Application.Workbooks.Add(true);
//取得当前的工作簿(刚才新建的那个)
Excel.Workbook books = (Excel.Workbook)app.ActiveWorkbook;
//从当前的工作簿中取得当前活动的工作表
Excel.Worksheet sheets = (Excel.Worksheet)books.ActiveSheet;
//通过行和列直接写入数据到指定单元格(第2行第2列,即"B2")
for (int i = 0; i < headerList.Count; i++)
{
sheets.Cells[1, i + 1] = headerList[i];
}
//保存文件
books.SaveCopyAs(fileName);
//关闭文件
books.Close(false, missing, missing);
//退出Excel
app.Quit();
}
}
这里的fileName是你要创建Excel文件的绝对路径,headerList是要预存的Excel文件标题.
第三个问题,是将DataTable中的数据写入excel,如果DataTable中的数据有单引号或有其它特殊符号,在插入Excel时,极易出错,解决方法是用参数来代替DataTable中的数据。
先用ole创建一个excel连接
/// <summary>
/// 获取Excel连接
/// </summary>
/// <returns>conn</returns>
public static OleDbConnection GetExcelConnection(string path)
{
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + path + ";" + "Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(connString);
return conn;
}
其中参数path 为Excel的绝对路径。
然后再将DataTable中的数据写入excel,方法如下:
/// <summary>
/// 将数据写到excel
/// </summary>
/// <param name="fileName">excel路径</param>
/// <param name="table">有数据的DataTable</param>
public void WriteDataToExcel(string fileName, DataTable table)
{
OleDbConnection excelConn = ConnectionManager.GetExcelConnection(fileName);
try
{
excelConn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = excelConn;
for (int i=0;i<table.Rows.Count;i++)
{
OleDbParameter[] param = new OleDbParameter[table.Columns.Count];
string sql = "insert into [sheet1$] values (";
for (int j = 0; j < table.Columns.Count; j++)
{
string para = "@param" + j;
if (j == table.Columns.Count - 1)
{
sql = sql + para;
}
else
{
sql = sql + para + ",";
}
string value = table.Rows[i][j].ToString();
param[j] = new OleDbParameter(para, value);
cmd.Parameters.Add(param[j]);
}
sql = sql + ")";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
}
catch
{
throw;
}
finally
{
ConnectionManager.Close(excelConn);
}
}
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:个人博客面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号