关于C#中读取Excel中某几个单元格的方法

hh12345688 2014-06-19 09:10:48
首先会从数据库取要取得Excel单元格的位置
举个列子:
list<string> place = new list<string>();
place.Add("B3");
place.Add("E5");
place.Add("V7");
......................
上面的数据都是自己随便加的,真正情况是从数据库取得,是不知道是多少数据,多少值的,只是打个比方。

问:怎么去在Excel里读取这些动态的位置?想过先放在一个DT里面,但是对应不到ABCDEFG的列啊?
...全文
565 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
kjs_2234693186 2014-06-20
  • 打赏
  • 举报
回复
Excel对数据进行多列排序(字符数量原因省略升序和降序) private void tsbtn_Open_Click(object sender, EventArgs e) { OpenFileDialog openFile = new OpenFileDialog();//实例化打开对话框对象 openFile.Filter = "Excel文件|*.xls";//设置打开文件筛选器 openFile.Title = "打开Excel文件";//设置打开对话框标题 if (openFile.ShowDialog() == DialogResult.OK)//判断是否选择了文件 { tstxt_Excel.Text=openFile.FileName; WBrowser_Excel.Navigate(openFile.FileName);//在窗体中显示Excel文件内容 List<string> P_list_SheetNames = GetSheetName(tstxt_Excel.Text);//获取选中Excel中的所有工作表 tscbox_Sheet.Items.Clear();//清空工具栏中的下拉列表 foreach (string P_str_SheetName in P_list_SheetNames)//遍历工作表集合 { tscbox_Sheet.Items.Add(P_str_SheetName);//将工作表名称显示在下拉列表中 } if (tscbox_Sheet.Items.Count > 0)//判断下拉列表中是否有项 tscbox_Sheet.SelectedIndex = 0;//设置默认选择第一项 } } private void tscbox_Sheet_SelectedIndexChanged(object sender, EventArgs e) { CloseProcess("EXCEL");//关闭所有Excel进程 object missing = System.Reflection.Missing.Value;//定义object缺省值 Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();//实例化Excel对象 //打开Excel文件 Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Open(tstxt_Excel.Text, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing); Microsoft.Office.Interop.Excel.Worksheet worksheet;//声明工作表 worksheet = ((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[tscbox_Sheet.Text]);//获取选择的工作表 worksheet.Activate();//激活工作表 excel.DisplayAlerts = false;//设置保存Excel时不显示对话框 workbook.Save();//保存工作表 CloseProcess("EXCEL");//关闭所有Excel进程 WBrowser_Excel.Navigate(tstxt_Excel.Text);//在窗体中重新显示Excel文件内容 } private void tsbtn_ASCSort_Click(object sender, EventArgs e) { CloseProcess("EXCEL");//关闭所有Excel进程 string P_str_Excel = tstxt_Excel.Text;//记录Excel文件路径 string P_str_SheetName = tscbox_Sheet.Text;//记录选择的工作表名称 object P_obj_Start = tstxt_Start.Text;//记录开始单元格 object P_obj_End = tstxt_End.Text;//记录结束单元格 object missing = System.Reflection.Missing.Value;//定义object缺省值 Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();//实例化Excel对象 //打开Excel文件 Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Open(P_str_Excel, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing); Microsoft.Office.Interop.Excel.Worksheet worksheet;//声明工作表CodeGo.net/ worksheet = ((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[P_str_SheetName]);//获取选择的工作表 Microsoft.Office.Interop.Excel.Range searchRange = worksheet.get_Range(P_obj_Start, P_obj_End);//定义查找范围
PaulyJiang 2014-06-19
  • 打赏
  • 举报
回复
select * xxxxxx
smthgdin_020 2014-06-19
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
即使能直接从EXCEL里取到单独的一个单元格内容 内容很多的话,一遍一遍去取,效率很低吧? 自己做个函数映射一下列名和列序号呗. EXCEL里列名的排序,A-Z,之后是AA-AZ,BA-BZ 其实就相当于26进制,每一位都是A-Z 而B3,表示第2列第3行 先将B3拆分成字母和数字两部分,然后将字母映射成列序号
+1 另外,除了添加office.dll外,还有可以使用第三方的aspose,这样服务器上可以不装office。
於黾 2014-06-19
  • 打赏
  • 举报
回复
随便给你个ABC123 列序号=1*26*26+2*26+3 不需要每个组合的去判断,就把它当26进制数计算,先将A-Z映射成1-26,然后后面还有字母,前面的计算结果就*26并加上后面的,递归一下
於黾 2014-06-19
  • 打赏
  • 举报
回复
即使能直接从EXCEL里取到单独的一个单元格内容 内容很多的话,一遍一遍去取,效率很低吧? 自己做个函数映射一下列名和列序号呗. EXCEL里列名的排序,A-Z,之后是AA-AZ,BA-BZ 其实就相当于26进制,每一位都是A-Z 而B3,表示第2列第3行 先将B3拆分成字母和数字两部分,然后将字母映射成列序号
walkeeper 2014-06-19
  • 打赏
  • 举报
回复
引用 2 楼 u012825833 的回复:
[quote=引用 1 楼 FoxDave 的回复:] 用office的dll,找指定的单元格去写值 参考
Worksheet.Cells[row, column] - 就是某行某列的单元格,注意这里的下标row和column都是从1开始的,跟我平常用的数组或集合的下标有所不同。 上面写到读某行某列,可是我从数据库取得 都是E15 , H4 这种类型的 字符串。我写不进Worksheet.Cells[]这个方法呀,求指教。。[/quote] 引入excel的dll以后用组件去选则范围的单元格。 Excel.Range rg=(Excel.Range)sheet.get_Range("A1", "A10"); var item=rg.value2; ITEM就是A1~A10每一行的数据,LZ可以尝试一下。
tinydyw 2014-06-19
  • 打赏
  • 举报
回复
1.你需要a-z,1-26的两个比对数组 2.你需要将得到的字符串拆分成两个部分
hh12345688 2014-06-19
  • 打赏
  • 举报
回复
引用 1 楼 FoxDave 的回复:
用office的dll,找指定的单元格去写值 参考
Worksheet.Cells[row, column] - 就是某行某列的单元格,注意这里的下标row和column都是从1开始的,跟我平常用的数组或集合的下标有所不同。 上面写到读某行某列,可是我从数据库取得 都是E15 , H4 这种类型的 字符串。我写不进Worksheet.Cells[]这个方法呀,求指教。。
Justin-Liu 2014-06-19
  • 打赏
  • 举报
回复
用office的dll,找指定的单元格去写值 参考

111,094

社区成员

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

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

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