C# Excel如何复制一列?问题解决马上给分!

esprit0318 2007-09-11 02:51:47
如题!VB.net里有Sheets(index).Columns(index).copy()
C#中是怎么样的?谢谢!
...全文
1891 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
athuhu0321 2010-02-26
  • 打赏
  • 举报
回复
学习 现在正需要C#&excel的结合呵呵
yuyyu2016 2007-10-11
  • 打赏
  • 举报
回复
mark
校园的早晨 2007-09-11
  • 打赏
  • 举报
回复
http://blog.csdn.net/blog51/archive/2007/08/28/1761493.aspx
参考 完整方案
kingyan1985 2007-09-11
  • 打赏
  • 举报
回复
Sheets[index].Columns[index].copy()
懒牛科技 2007-09-11
  • 打赏
  • 举报
回复
自己慢慢研究把1
懒牛科技 2007-09-11
  • 打赏
  • 举报
回复
你可以通过excel知道excel的schema和每个列的列明,然后读取
代码:
public override DataSet ReadExcel(String xlsPath)
{

DataTable schemaTable = new DataTable();
OleDbDataAdapter workAdapter = new OleDbDataAdapter();
DataSet workSet = new DataSet();
OleDbConnection conn = new OleDbConnection();

char[] charArray = { ',', ' ' };
char[] charArray2 = { '$' };
string cmdString, cmdString2;
OleDbCommand cmd = new OleDbCommand();
string defaultTableName;

workSet.DataSetName = "excelData";

try
{
//设置连接字符串。
String connString = string.Empty;

if (ExcelReader.ExcelConnectionString != string.Empty)
connString = string.Format(ExcelReader.ExcelConnectionString, xlsPath);
else
connString = string.Format(ConnectionString, xlsPath);

//打开连接
conn.ConnectionString = connString;
conn.Open();



//使用数据源表中的架构信息
//填充 DataTable。
schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" });
// 使用表名称填充数组。

if (schemaTable.Rows.Count < 1) return null;

defaultTableName = schemaTable.Rows[0]["Table_Name"].ToString();

//清除 DataTable
schemaTable.Clear();

//使用表名称和列架构
// 信息来构造 SELECT 语句,
// 使用数据源列中的架构信息
//填充 DataTable。

schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,
new Object[] { null, null, defaultTableName, null });

//逐个查看列名称,并将其附加到
//SELECT 语句中, 请注意用此中方法字段的顺序将和Excel不一致
//cmdString = "SELECT ";
//for(int x = 0 ;x<schemaTable.Rows.Count;x++)
//{
// cmdString = cmdString + string.Format("[{0}]",schemaTable.Rows[x]["Column_Name"]) +", ";
//}
//cmdString2 = cmdString.TrimEnd(charArray);
//请注意,无须将“$”附加到
//表名称中 - 它已包括在内。
//cmdString2 = cmdString2 + " FROM [" + defaultTableName + "]";


cmdString2 = "SELECT * FROM [" + defaultTableName + "]";

string cmdWhere = " WHERE ";
for (int x = 0; x < schemaTable.Rows.Count; x++)
{
cmdWhere = cmdWhere + string.Format("[{0}]", schemaTable.Rows[x]["Column_Name"]) + " is not null or ";
}
cmdWhere = cmdWhere.Substring(0, cmdWhere.Length - 3);
//使用 SELECT 命令和
//OleDbDataAdapter 填充 DataSet。
cmd.CommandText = cmdString2 + cmdWhere;
workAdapter.SelectCommand = cmd;
workAdapter.SelectCommand.Connection = conn;
string tableName = defaultTableName.TrimEnd(charArray2);
workAdapter.Fill(workSet, tableName);
schemaTable.Clear();

//把DataSet里的内容转换为大写。等待寻求更好的方法
if (workSet.Tables.Count > 0)
{
workSet.BeginInit();
for (int j = 0; j < workSet.Tables[0].Rows.Count; j++)
{
DataRow dr = workSet.Tables[0].Rows[j];
dr.BeginEdit();
for (int i = 0; i < workSet.Tables[0].Columns.Count; i++)
{
if (!dr.IsNull(i))
{
dr[i] = dr[i].ToString().ToUpper();
}
}
dr.EndEdit();
}
workSet.EndInit();
}

}
catch (Exception ex)
{
LogHelper.ErrorFormat("GetExcelData:{0}", ex);
throw ex;
}
finally
{
conn.Close();

if (schemaTable != null)
schemaTable.Dispose();
if (workAdapter != null)
workAdapter.Dispose();
if (cmd != null)
cmd.Dispose();
if (conn != null)
conn.Dispose();
}

return workSet;

}//ReadExcel

}
GZ_2008 2007-09-11
  • 打赏
  • 举报
回复
自己些个方法,循环复制其值可以实现你需要的功能.C#好象目前还没有如VB那样的方法.一句话就实现这个功能.
esprit0318 2007-09-11
  • 打赏
  • 举报
回复
回楼上的
Sheets[index].Columns[index]是有错的,Columns[]这里需要两个参数
在C#中复制的话只能是用Range才行吗?
Eddie005 2007-09-11
  • 打赏
  • 举报
回复
Sheets[index].Columns[index].copy()

都是调用Excel类库,方法基本上是一样的,只是语法稍有差异而以
bigmingming 2007-09-11
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20050325/13/3880608.html 参考删除

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧