-
2019-08-19 12:23:10
这个需求简单来说,就是从右向左查找字符出现的首个位置,或从左向右查找字符出现的最后位置,例如:
查找“普通人民代表大会发言人任免人选”中,最后一个“人”字的位置,直接的查找是做不到的。
以下是各种公式:(以查找A1单元格中最后一个“@”为例)
1.直线思路公式:
=FIND("☆",SUBSTITUTE(A1, "@", "☆", LEN(A1)-LEN(SUBSTITUTE(A1, "@", ""))))
解释:先通过替换删除法算出原字符串中有多少个“@”,例如n个,然后将第n个“@”替换成“☆”再查找“☆”的位置。
2.行扩展拆分字符公式:
=LOOKUP(1,0/(MID(A1,COLUMN(1:1),1)="@"),COLUMN(1:1))
解释:column(1:1)会自动扩展成第一行的有限列数组(2003版上限256列,2010版上限16384列),然后公式就成了对A1的内容按每个字符拆分成数组,然后比对是否是“@”,是的话会返回逻辑值“True”,用零除运算后,“True”的项会变成“0”,其他变成“#DIV/0”,而对这些项组成的数组查找“1”将等同于查找最后一个“0”,然后给出对应的行号(位置)数字。缺点就是2003版的话字符长度限制大。
3.列扩展拆分字符公式:
=LOOKUP(1,0/(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)="@"),ROW(INDIRECT("1:"&LEN(A1))))
解释:原理同上,只是将行变成列,而且是限制行数为A1内容长度,而行数上限比列数上限大多了。
同样原理还有两种公式:
=LOOKUP(LEN(A1),FIND("@",A1,ROW(INDIRECT("1:"&LEN(A1)))))
原理同上,只是拆分数组的方式是从第n个字符开始查找“@”(小于n的位置值就被忽略),找到就返回位置值,然后对这些位置值组成的数组查找最接近A1内容长度的值,返回。
类似公式,不过需要Ctrl-Shift-Enter三键输入:
=MATCH(LEN(A1),FIND("@",A1,ROW(INDIRECT("1:"&LEN(A1)))))
=MATCH(1,0/(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)="@"))
4.还是列扩展拆分字符公式,需要Ctrl-Shift-Enter三键输入:
=MAX(IF(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)="@",ROW(INDIRECT("1:"&LEN(A1)))))
解释:原理还是同上,不同的是使用了max()。从上面两节的解释可以看到,其实要找也是找最大的位置值,所以可能大多数人一想就会想用Max(),但为什么不行呢——因为max()需要对比数值大小,从而不接受错误值,而lookup()、match()则只是字符匹配,可以略过错误值。为了使用max(),就要用if()来排除错误值项,公式就长了。
要避开使用if(),那么可以使用类似sumproduct()风格的条件式(注意中间的 * 号),需要Ctrl-Shift-Enter三键输入:
=MAX((MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)="@")*ROW(INDIRECT("1:"&LEN(A1))))
5.极致最短公式:
=-LOOKUP(,-FIND("@",A1,ROW(A:A)))
解释:依然是列拆分字符公式,但是行数限制省去了,然后将查找到的位置值取相反数,使位置值全变【从大到小】的负数(强调一下,其绝对值就是【从小到大】),再从中查找最后一个位置值(略过错误值),再取一次相反数获得原来的位置值。
这里要解释一下,为什么相反数了还是查找最后一个位置值?
原理是这样的,lookup()是假定查找的序列(数组或向量)是升序排列的(不像vlookup和match那样可指定假定降序或假定乱序/精确查找),并在这样的假定下进行二分法查找(详情请看【深入理解LOOKUP:LOOKUP函数的查找原理】,返回小于等于目标值的项。因此,lookup()相当于是假定查找序列最大的值在最后,如果找不到和目标值相同的值,那么其返回的就是最后一个非错误值。
6.另类思路公式,需要Ctrl-Shift-Enter三键输入:
=TEXT(LEN(A1)-MATCH("@",LEFT(RIGHT("@"&A1,ROW($1:$99))),)+1,"[>];")更多相关内容 -
删除pandas中包含某一字符的单元格
2021-11-07 16:53:40if data.iloc[i,:].isin(['—']).any():#每一行有任何一个单元格有'—'的话 del_index.append(i) data.drop(del_index,inplace=True) data.to_excel(os.getcwd()+'/temp/2-2.xlsx')#保存文件 ...待处理数据如下,含有两个‘—’
del_index=[] for i in range(data.shape[0]): if data.iloc[i,:].isin(['—']).any():#每一行有任何一个单元格有'—'的话 del_index.append(i) data.drop(del_index,inplace=True) data.to_excel(os.getcwd()+'/temp/2-2.xlsx')#保存文件
-
批量删除execl单元格第一个字符`
2017-03-08 09:16:23在导入数据是用的是别的部门提供的数据,每个单元格第一个字符用的是1的左边的`符号,在导入到数据库中时变成了乱码,网上搜了很多的方法; 1,ctrl+h替换,不好使,没起作用。 2.套用公式; 如果数据都在A列,...在导入数据是用的是别的部门提供的数据,每个单元格第一个字符用的是1的左边的`符号,在导入到数据库中时变成了乱码,网上搜了很多的方法;
1,ctrl+h替换,不好使,没起作用。
2.套用公式;
如果数据都在A列,则B2单元格写入公式
=RIGHT(A2,LEN(A2)-1) 或
=MID(A2,2,LEN(A2)-1)或
=SUBSTITUTE(A2,"A",,1)
下拉复制公式
完成选中B列----右键-----复制---再右键----选择性粘贴----数值----确定,再删去原A列,新A列,但是也不行。3.数据分列
--数据----分列----固定宽度----将分列线标在第一个A后面----完成 ,没成功
--数据----分列----分隔符号----其他----完成 ,成功
-
遍历Excel获取每个单元格数据
2019-03-29 15:31:50//遍历行的集合,取得每一个行的datarow对象 foreach (DataRow row in dataTableRow) { foreach (var item in row.ItemArray) { if (item.ToString().Trim() != "" && reg.IsMatch(item.ToString().Trim())) ...public static void GetExcelData(string filePath, string fileName, int operType, string sheet = "sheet1") { try { string md5 = string.Empty; List<ECADetailInfo> eCADetailInfos = new List<ECADetailInfo>();//子表数据 if (operType != 2)//除了删除的文件,其他均获取MD5值 { md5 = GetMD5HashFromFile(filePath);//文件的MD5值 string fileType = string.Empty; string connectinString = string.Format("Provider=Microsoft.ACE.OLEDB.{0}.0;Persist Security Info=False;" + "Extended Properties=\"Excel {1}.0;HDR={2};IMEX=1;\";" + "data source={3};", (fileType == ".xls" ? 4 : 12), (fileType == ".xls" ? 8 : 12), (true ? "Yes" : "NO"), filePath); //建立 链接 创建到数据源的对象 OleDbConnection connection = new OleDbConnection(connectinString); //打开链接 connection.Open(); //返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等 DataTable dtSheetName = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //包含excel中表名的字符串数组 string[] strTableNames = new string[dtSheetName.Rows.Count]; for (int k = 0; k < dtSheetName.Rows.Count; k++) { strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString(); } //string sql = $"select * from [{sheet}$]"; //sql 语法 是一个查询命令,该句报错,修改成如下 string sql = "select * from [" + strTableNames[0] + "]"; OleDbDataAdapter adapter = new OleDbDataAdapter(sql, connection); DataSet dataSet = new DataSet();//用来放数据 用来存放DataTable adapter.Fill(dataSet);//表示把查询 结果datatable 放到(填充)dataset 里面 connection.Close();//释放链接资源 //取得数据 DataTableCollection tableCollection = dataSet.Tables; //获取当前集合中所有 表格 DataTable table = tableCollection[0];//因为只往dataset里面放置 了一张表格 ,所有这里取得索引为0的表格就是我们刚刚查询到的表格 //取得表格中的数据 //取得table中所有的行 DataRowCollection dataTableRow = table.Rows;//返回了一个行的集合 Regex reg = new Regex(@"(?<ITEM>[0-9]{9,})-");//获取9位数字,匹配品号 string content = string.Empty;//获取匹配的内容 //遍历行的集合,取得每一个行的datarow对象 foreach (DataRow row in dataTableRow) { foreach (var item in row.ItemArray) { if (item.ToString().Trim() != "" && reg.IsMatch(item.ToString().Trim())) { foreach (Match mat in reg.Matches(item.ToString().Trim())) { ECADetailInfo eCADetailInfo = new ECADetailInfo(); eCADetailInfo.ItemInfo = mat.Groups["ITEM"].Value.ToString(); eCADetailInfos.Add(eCADetailInfo); } } } } } //数据库执行的操作 switch (operType) { case 0://新增 ECAInfo eCAInfo = new ECAInfo(); eCAInfo.ECAId = Guid.NewGuid(); eCAInfo.ECAName = fileName; eCAInfo.ECAPath = filePath; eCAInfo.ECAMD5 = md5; eCAInfo.IsEffiect = true; new BaseLink().InsertECAInfo(eCAInfo, eCADetailInfos, out string msg); Log.WriteLog(LogFile.Info, fileName + "新增" + msg); break; case 1://修改 ECAInfo info_update = new BaseLink().SelectECAInfo(filePath, fileName); if (info_update != null) { info_update.ECAMD5 = md5; info_update.IsEffiect = true; new BaseLink().UpdateEACInfo(info_update, eCADetailInfos,out string msg_update); Log.WriteLog(LogFile.Info, fileName + "修改" + msg_update); } break; case 2://删除 ECAInfo info_dele = new BaseLink().SelectECAInfo(filePath, fileName); if (info_dele != null) { new BaseLink().DeleteECAInfo(info_dele,out string msg_dele); Log.WriteLog(LogFile.Info, fileName + "删除" + msg_dele); } break; default: break; } } catch (Exception ex) { Log.WriteLog(LogFile.Error, "读取Excel内容出错!\r\n" + ex); } }
其中关键报错汇总:
1.在OleDbConnection的链接问题,很多时候会报错,提示Microsoft.Ace.OleDB.12.0没有在本机注册
这个问题下载一下驱动就行Microsoft Access 2010 数据库引擎可再发行程序包
选择对应的程序进行下载,32位和64位.
2.进行数据链接时,报错不能识别sheet参数(上述代码中已经是正确代码)
将原来
string sql = $"select * from [{sheet}$]"; //sql 语法 是一个查询命令,该句报错,修改成如下
修改为:
//返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等 DataTable dtSheetName = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //包含excel中表名的字符串数组 string[] strTableNames = new string[dtSheetName.Rows.Count]; for (int k = 0; k < dtSheetName.Rows.Count; k++) { strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString(); } string sql = "select * from [" + strTableNames[0] + "]";
申明:时间仓促,未能及时记下参考博客的地址,在此表示抱歉,同时也感谢提供回答的各位博友,希望我的分享对你有用
-
将矩阵转换为格式化文本:使用 matlab 格式字符串将数字矩阵转换为元胞数组中的文本。 删除零的选项-matlab...
2021-05-30 17:13:52- num2str() 将一行转换为单个字符串,每个单元格导出为一个字符。 - num2str() 不能应用于元胞数组。 这个简单的函数使用 arrayfun() 和使用 num2str() 应用格式字符串的嵌套函数将每个元素转换为数组中的字符... -
CSV文件对逗号和引号字符的转义处理,使用EXCEL打开时在一个单元格内
2021-04-20 14:36:24CSV文件本质是一种用逗号和(回车)换行符分割的文本文件,可以直接用Excel打开 * CSV (逗号分隔值文件格式)Comma-Separated Values 【每一行的分割符必须是英文... * 纯文本意味着该文件是一个字符序列,不含必须... -
excel指定单元格区域添加相同的字符串
2018-12-14 19:28:52思路 吐槽一下:网上百度的结果不知道是过时了还是office版本不对,老是出错! 思路:使用excel的公式,但前提一定要保证公式中数据类型的一致性,否则会出现类似以下几种情况: #value!...将新建单元格第... -
清理Excel单元格中不可见的垃圾字符
2021-06-10 03:25:31***最近遇到一个Excel数据清洗问题。系统导出的数据,看起来是正常的,选择单元格就发现内容包含了一些随机的垃圾字符,这些垃圾字符在单元格中以白色和最小号字体显示,所以看起来正常。上网找到“Excel单元格内... -
如何在Excel中比较两个单元格
2020-08-12 04:19:31如何在Excel中比较两个单元格 (How to Compare Two Cells in Excel) Aside from staring at them closely, how can you compare two cells in Excel? Here are a few functions and formulas that check the ... -
单元格命名_怎样给单元格重新命名或是删除单元格名称_vba
2021-07-29 07:39:42Excel给每个单元格都有一个默认的名字,其命名规则是列标加横标,例如D3表示第四列、第三行的单元格。有时便于记忆或方便运算我们希望把单元格命名成我们自己想要的名称行不行呢,当然可以,如果要将某excel2003... -
CSV文件去除每行多余字符
2021-11-14 20:13:34原始数据如下图,直接保存为CSV出错,用记事本打开...python去除csv文件中每一行的多余字符_cl2227619761的博客-CSDN博客处理其他字符 后面直接查找替换完成, 搞定,查找很多字符的处理都是字符串不是其他 处... -
(WPS)Excel表格中批量删除指定字符
2020-09-21 11:01:35(WPS)Excel表格中批量删除指定字符 打开excel表格,选中需要删除的指定行或列的数据,键盘选择快捷键ctrl+H, ![比如要删除的字符是 ’ ’ 鼠标点击“全部替换”,删除 ’ [ ’ 字符成功。 -
java删除指定字符串leetcode-Data-Structures-Algorithms:此存储库的唯一目的是提醒某些数据结构和算法如何...
2021-06-30 09:48:41存储一个数组,以便可以通过数学公式从其索引单元格计算每个元素的位置。 一维数组-> arr[col] 二维数组-> arr[row][col] 三维数组-> arr[depth][row][col] 注意: Java最多支持255维数组 :clapping_hands: :... -
pandas移除dataframe字符串数据列中的前N个字符(remove the first n characters from values from column ...
2022-01-03 17:58:40pandas移除dataframe字符串数据列中的前N个字符(remove the first n characters from values from str column of dataframe) -
Excel单个单元格内逗号分割的字符串去重
2020-01-13 17:56:10一、将单个单元格分割成多个单元格 选择“数据”,分割文本 即可 二、去除重复 数据所在第一个单元格以A1为例,另取空地 =IF(COUNTIF($A$1:A1,A1)=1,A1,"") 然后右拉,得到的本行数据皆已去重,重复数据被替换成了... -
element点击获取指定单元格 @cell-click精确到每一格
2021-01-27 11:25:28element获取指定单元格 官网链接@cell-click ...点击单元格 精确到每一格 // An <el-row>商品信息</el-row> <div style="padding: 10px 0 20px 20px"> <el-table border :data="dataLis -
excel去掉一行文字中的逗号合并在一起_这30个Excel实用技巧,效率大神都忍不住收藏了。...
2020-11-21 14:36:16文章梳理了30个常用小技巧,分享给大家参考尝试。1、不复制隐藏的单元格比如,截图中5-8行单元格都隐藏掉了,复制的时候只想复制可见单元格。如果直接复制、粘贴,那被隐藏的数据也会被复制出来,怎样才能不复制隐藏... -
数据标准化 使用Python脚本处理excel单元格换行符
2021-03-04 10:17:42在下在做数据分析时,原始数据是excel格式的,导入hive表时将其转化为txt格式。excel文件转txt格式的步骤如下:1.打开另存为2....例子如下:在这个表格中,B3,B4单元格都存在这换行符。如果将其导入到... -
python 读取合并单元格
2020-11-28 12:10:13广告关闭腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!... 使用循环判断是合并单元格还是普通单元格,并将合并单元格中的首行值赋值给合并单元格... -
VBA对单元格及区域、行、列的选择、写入、复制、删除、插入等
2021-05-02 18:28:59EXCEL是由很多的对象组成,每个对象都有他的属性和方法,所谓的对象可以理解为所有存在的东西,在同一个程序里的对象之间是存在关系的,比如说上下级关系或同级关系,上下级关系之间用英文句点“.”连接。... -
Excel中单元格中空格的清除方法
2018-02-04 20:08:18一、使用查找替换方法 1、打开查找/替换对话框 2、在”替换”框中的查找内容中输入空格,替换为编辑框中什么都不输入,再点击“全部替换”按钮,即可实现去除所有的空格 二、使用”数据”按钮里面的”... -
刘启智问:excel里怎么首行缩进 Excel在表格中的文字要首行缩进二字符,该如何设置?
2021-06-28 04:27:31excel单元格中,如何首行缩进?1、双击打开需要设置首行缩进的Excel表格。2、拖动鼠标选中需要设置首行缩进的段落文字。3、在选中的文字区域中右击,打开扩展菜单并选择扩展菜单中的段落选项,进入段落设置界面。4、... -
excel两列相减
2020-12-23 15:01:57十二、用连字符“&”来合并文本 如果我们想将多列的内容合并到一列中,不需要利用函数,一个小小的连字符“&”就能将它搞定(此处假定将B、C、D列合并到一列中)。 1.在D列后面插入两个空列(E、F列),然后在D1单元格... -
pandas删除包含指定内容的行
2021-01-17 15:55:12Outline处理数据时,遇到文件中包含一些不需要的数据(行),需要把这些不符合要求的行给删除掉。例如:该数据中应该都是2000年的数据,但是包含了一些2001年的数据,所以需要把2001年的数据给删除掉。筛选出指定行... -
POI Excel 单元格内容类型判断并取值
2021-04-17 02:19:57excel单元格内容拆分 这几天在整理数据,但是数据都在表格的一个单元格中,看起来很不方法,所以在网上找到excel单元格内如拆分的方法,并亲测有效 介绍2种拆分的方法 方法一: (1)在B1输入公式=right(text,[ ...... -
Pandas 常用的数据表行列文本字符数据查找、替换、删除函数:df.isin, str.find,str.contains,str.replace,...
2022-01-26 15:02:29经常需要从一个Python pandas数据表中查找、替换、删除含有某个或某些多个符合条件的字符的数据,常用的函数df.isin, str.find,str.contains,str.replace,df.drop,df.replace,方法总结如下: 1. 直接替换或删除含有... -
js动态创建、删除表格示例代码
2020-12-11 18:25:19生成一个2000*5的表格,每个单元格的内容是行号+逗号+列号 方法一:使用createElement生成表格,使用insertRow和insertCell方法生成行列,单元格的内容使用innerHTML属性进行填充。 方法二:使用createElement生成... -
完全解读 OpenPyXL 设置 Excel 单元格样式
2021-08-17 00:19:19来源:Python中文社区OpenPyXL 使您能够以多种不同的方式设置单元格的样式。样式化单元格会让您的电子表格充满魅力!这将有助于将它们与其他电子表格区分开来。但是请不要过度使用, 如... -
在数据表中添加或删除一列
2021-02-02 06:04:06注意:我们希望能够尽快以你的语言为你提供...Access 提供了多种在数据表中添加或删除列的方法。 你可以使用数据表视图来添加或删除列,并设置这些列的数据类型。 此外,你还可以通过任务窗格添加字段,或者打开数... -
《matlab怎么合并excel单元格并赋值?》 matlab合并 excel表格数据
2021-04-21 20:43:32matlab如何将多个变量中的数据拼接成一个数组保存到excel中?楼主不妨用xlsread格式为:[num,txt,raw]=xlsread(filename,sheet);其中num,txt和raw分别是数据,文本分类处理的所有信息。filename件名,比如你件为table...