我有一张电子表格,我输入赛车时间,排名是自动计算的。 问题是,电子表格无法读取格式mm:ss,xxx(x代表毫秒)
当我使用冒号时 - >> 02:02:333 它会认为它的2小时2分333秒(我想要的是2分钟,2秒和333毫秒),这将把它转换为02:07:33
任何让我输入“02:02,333”并将其用作值的解决方案?
任何帮助表示赞赏! 托拜厄斯
答案 0 :(得分:4)
更新:根据他分享的表单,更简单的方法是添加一个列并插入以下函数=mid(E2,4,2)*60+mid(E2,4,2)+mid(E6,7,3)*.001
,其中E2是包含时间的单元格,单位为mm:ss, SSSformat。然后根据列值进行排名。
我的原始回答:这是一个脚本,它将处理突出显示的单元格,并将时间格式转换为毫秒,并将结果放在相邻的单元格中。由于我不知道你想对这些值做什么,你可以用返回的值做你想做的事。转换假定您只关心小时/分钟/秒而不是日期部分,但如果您查看代码,您可以看到您可以将任何格式传递给您,并且因为您获得了日期对象,您可以处理任何方式你要。这基本上复制了来自HERE的Matt Kruse的日期函数,只是将其修改为零时间部分(可选)并向标记化器添加毫秒。
// ------------------------------------------------------------------
// Utility functions for parsing
// ------------------------------------------------------------------
function _isInteger(val) {
var digits="1234567890";
for (var i=0; i < val.length; i++) {
if (digits.indexOf(val.charAt(i))==-1) { return false; }
}
return true;
}
function _getInt(str,i,minlength,maxlength) {
for (var x=maxlength; x>=minlength; x--) {
var token=str.substring(i,i+x);
if (token.length < minlength) { return null; }
if (_isInteger(token)) { return token; }
}
return null;
}
// ------------------------------------------------------------------
// getDateFromFormat( date_string , format_string, zeroTimes )
//
// This function takes a date string and a format string. It matches
// If the date string matches the format string, it returns the
// getTime() of the date. If it does not match, it returns 0.
// ------------------------------------------------------------------
function getDateFromFormat(val,format, zeroTimes) {
val=val+"";
format=format+"";
var i_val=0;
var i_format=0;
var c="";
var token="";
var token2="";
var x,y;
var now=new Date();
var year=now.getYear();
var month=now.getMonth()+1;
var date=now.getDate();
var hh=now.getHours();
var mm=now.getMinutes();
var ss=now.getSeconds();
var sss=now.getMilliseconds();
if(zeroTimes){
hh=0;
mm=0;
ss=0;
sss=0;
}
var ampm="";
Logger.log(" getDateFromFormat(" + val +","+format+")");
while (i_format < format.length) {
// Get next token from format string
c=format.charAt(i_format);
token="";
while ((format.charAt(i_format)==c) && (i_format < format.length)) {
token += format.charAt(i_format++);
}
// Extract contents of value based on format token
if (token=="yyyy" || token=="yy" || token=="y") {
if (token=="yyyy") { x=4;y=4; }
if (token=="yy") { x=2;y=2; }
if (token=="y") { x=2;y=4; }
year=_getInt(val,i_val,x,y);
if (year==null) { return 0; }
i_val += year.length;
if (year.length==2) {
if (year > 70) { year=1900+(year-0); }
else { year=2000+(year-0); }
}
}
else if (token=="MMM"||token=="NNN"){
month=0;
for (var i=0; i<MONTH_NAMES.length; i++) {
var month_name=MONTH_NAMES[i];
if (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()) {
if (token=="MMM"||(token=="NNN"&&i>11)) {
month=i+1;
if (month>12) { month -= 12; }
i_val += month_name.length;
break;
}
}
}
if ((month < 1)||(month>12)){return 0;}
}
else if (token=="EE"||token=="E"){
for (var i=0; i<DAY_NAMES.length; i++) {
var day_name=DAY_NAMES[i];
if (val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()) {
i_val += day_name.length;
break;
}
}
}
else if (token=="MM"||token=="M") {
month=_getInt(val,i_val,token.length,2);
if(month==null||(month<1)||(month>12)){return 0;}
i_val+=month.length;}
else if (token=="SSS"||token=="SS"||token=="S") {
sss=_getInt(val,i_val,token.length,3);
if(sss==null||(sss<0)){return 0;}
i_val+=sss.length;
Logger.log("Milli: " + sss);
}
else if (token=="dd"||token=="d") {
date=_getInt(val,i_val,token.length,2);
if(date==null||(date<1)||(date>31)){return 0;}
i_val+=date.length;}
else if (token=="hh"||token=="h") {
hh=_getInt(val,i_val,token.length,2);
if(hh==null||(hh<1)||(hh>12)){return 0;}
i_val+=hh.length;}
else if (token=="HH"||token=="H") {
hh=_getInt(val,i_val,token.length,2);
if(hh==null||(hh<0)||(hh>23)){return 0;}
i_val+=hh.length;}
else if (token=="KK"||token=="K") {
hh=_getInt(val,i_val,token.length,2);
if(hh==null||(hh<0)||(hh>11)){return 0;}
i_val+=hh.length;}
else if (token=="kk"||token=="k") {
hh=_getInt(val,i_val,token.length,2);
if(hh==null||(hh<1)||(hh>24)){return 0;}
i_val+=hh.length;hh--;}
else if (token=="mm"||token=="m") {
mm=_getInt(val,i_val,token.length,2);
if(mm==null||(mm<0)||(mm>59)){return 0;}
i_val+=mm.length;}
else if (token=="ss"||token=="s") {
ss=_getInt(val,i_val,token.length,2);
if(ss==null||(ss<0)||(ss>59)){return 0;}
i_val+=ss.length;
Logger.log("Seconds: " + ss);
}
else if (token=="a") {
if (val.substring(i_val,i_val+2).toLowerCase()=="am") {ampm="AM";}
else if (val.substring(i_val,i_val+2).toLowerCase()=="pm") {ampm="PM";}
else {return 0;}
i_val+=2;}
else {
if (val.substring(i_val,i_val+token.length)!=token) {return 0;}
else {i_val+=token.length;}
}
}
Logger.log("Year: "+year+" Month: " +month+ " date " +date+ " hour " +hh+ " minutes "+mm+ " seconds " +ss+" milli " +sss);
// If there are any trailing characters left in the value, it doesn't match
if (i_val != val.length) { return 0; }
// Is date valid for month?
if (month==2) {
// Check for leap year
if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year
if (date > 29){ return 0; }
}
else { if (date > 28) { return 0; } }
}
if ((month==4)||(month==6)||(month==9)||(month==11)) {
if (date > 30) { return 0; }
}
// Correct hours value
if (hh<12 && ampm=="PM") { hh=hh-0+12; }
else if (hh>11 && ampm=="AM") { hh-=12; }
var newdate=new Date(year,month-1,date,hh,mm,ss);
newdate.setMilliseconds(sss);
return newdate;
}
/**
*/
function formatSelection() {
var sheet = SpreadsheetApp.getActiveSheet();
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var dayMillis = 24*3600*1000; //miliseconds in a day
var range = SpreadsheetApp.getActiveSheet().getActiveRange();
var numRows = range.getNumRows();
var numCols = range.getNumColumns();
for (var i = 1; i <= numRows; i++) {
for (var j = 1; j <= numCols; j++) {
var currentValue = range.getCell(i,j).getValue();
Logger.log("Current Value: "+ currentValue);
var newDate=new Date();
newDate=getDateFromFormat(currentValue,"mm:ss,SSS",true);
var convertedNewDate=parseInt(newDate/dayMillis);
Logger.log(" New Date: " + newDate + " Converted Value: " + convertedNewDate);
var newTime=newDate.getHours()*1000*60*60+newDate.getMinutes()*1000*60+newDate.getSeconds()*1000+newDate.getMilliseconds();
SpreadsheetApp.getActiveSheet().getRange(range.getCell(i,j).getRow(),range.getCell(i,j).getColumn()+1).setValue("Milliseconds: "+ newTime);
//range.getCell(i,j).setValue(convertedNewDate);
//.setNumberFormat("mm:ss,SSS");
}
}
};
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Format as Value",
functionName : "formatSelection"
}];
sheet.addMenu("Time Functions", entries);
};
答案 1 :(得分:0)
=if(B4>=60,trunc(divide(B4,60),0)&":"&trunc(mod(B4,60),0)&":"&round(mod(B4,60),0)* 100,0),trunc(mod(B4,60),0)&":"&round(mod(B4,1)*100,0))
单元格 B4 = 137.35(137.35 秒)
显示为 2:17:35(2 分 17 秒,35 百秒)
单元格 B4 = 27.73(27.73 秒)
显示为 27:73(27 秒,73 百秒)