我正在从一个excel文件中读取数据并将数据写入另一个excel文件.
我的问题是源具有格式的日期,dd.mm.yyyy目标必须具有格式dd-mm-yyyy.
所以我搜索了SO并找到了这个答案用一个字符串替换另一个字符,这表明我可以使用substitute.
所以我尝试了这段代码:
For r = 1 To 10
myOutputSheet.Cells(6+r, 1).Value = myInputSheet.Cells(r, 1).Value 'Date
myOutputSheet.Cells(6+r, 1).Value = substitute(myOutputSheet.Cells(6+r, 1), ".", "-")
Next
Run Code Online (Sandbox Code Playgroud)
它给出了错误:
Microsoft VBScript runtime error: Type mismatch: 'substitute'
Run Code Online (Sandbox Code Playgroud)
我如何更改.为-?
更新
我也尝试过这个:
For r = 1 To 10
myOutputSheet.Cells(6+r, 1).Value = myInputSheet.Cells(r, 1).Value 'Date
replace(myOutputSheet.Cells(6+r, 1), 2, 1, "-")
replace(myOutputSheet.Cells(6+r, 1), 4, 1, "-")
Next
Run Code Online (Sandbox Code Playgroud)
但是这给出了错误:
Microsoft VBScript compilation error: Cannot use parentheses when calling a Sub
Run Code Online (Sandbox Code Playgroud)
因此我试过:
For r = 1 To 10
myOutputSheet.Cells(6+r, 1).Value = myInputSheet.Cells(r, 1).Value 'Date
replace myOutputSheet.Cells(6+r, 1), 2, 1, "-"
replace myOutputSheet.Cells(6+r, 1), 4, 1, "-"
Next
Run Code Online (Sandbox Code Playgroud)
但是这给出了错误:
Microsoft VBScript runtime error: Type mismatch: '[string: "-"]'
Run Code Online (Sandbox Code Playgroud)
首先,您应该知道Excel中的所有日期和时间都存储为数字,仅显示为日期.
因此,如果这样显示,则42,000可以是日期.这是1899年12月31日之后的第42,000天.那将是2014年12月27日.
事情变得复杂:日期不是作为数字存储,而是作为Excel中的文本存储.然后,对于Excel用户来说,单元格中有日期似乎实际上(仅供Excel理解)文本.虽然用户不可能仅通过查看单元格来区分两者之间的区别,但真正的区别在于您无法在纯文本日期执行和日期操作.
让所有人感到悲伤让我们看看两个小例子:
(1)进入到细胞中执行以下操作:11.12.2013.有可能Excel会将其识别为日期并将其转换为数字41,619.然而,你会看到约会.这是因为Excel自动将该单元格的格式更改General为Date.但是如果你改变那个单元格的格式,General你就会看到上面提到的数字.
(2)现在,在单元格中输入以下内容:2015-14-11.再一次,Excel很可能不会将其识别为日期,而是将其存储为纯文本.当您查看该单元格的数字格式时,您可能仍会看到General,如果您明确更改它Number仍然可以看到2015-14-11.
现在你可以更好地与@vacip上面的评论联系起来.他/她试图找出您的源文件中是否确实存在日期(存储为数字),或者此文件中只有文本可能表明它包含日期.
如果Excel在源文件中识别这些日期,则只需更改.NumberFormat单元格就可以轻松更改其格式.实质上,您可能希望查看源文件并检查是否可以将这些日期显示为数字(1899年12月31日之后的日期).
如果是这种情况,那么您应该能够将数字格式更改为dd-mm-yyyy并且您已完成设置.但是,如果要将文本存储在目标文件中或者要在其中保存日期,则再次重要.如果你想在那里存储日期并在源文件中将它们作为日期,那么我建议如下:
myOutputSheet.Cells(6+r, 2).Value2 = myInputSheet.Cells(6+r, 2).Value2
myOutputSheet.Cells(6+r, 2).NumberFormat = "dd-mm-yyyy"
Run Code Online (Sandbox Code Playgroud)
但是,如果您坚持转移13.11.2013到目标文件,那么您将需要使用以下内容(在源文件中实际识别日期的情况下):
myOutputSheet.Cells(6+r, 2).Value2 = Format(myInputSheet.Cells(6+r, 2).Value2, "dd-mm-yyyy")
Run Code Online (Sandbox Code Playgroud)
当你在源文件中有文本时,它可能会变得有点复杂.如果你不介意它保留文本而你真的只想更改.for a -那么你可以使用Replace上面评论中的建议:
myOutputSheet.Cells(6+r, 2).Value = Replace(myInputSheet.Cells(6+r, 2).Value, ".", "-")
Run Code Online (Sandbox Code Playgroud)
但是,如果您在源文件中有文本并且想要在目标文件中保存日期,那么您可以要求Excel尝试转换,CDate并提前检查是否可以将单元格的内容识别为日期IsDate:
myOutputSheet.Cells(6+r, 2).Value2 = Iif(IsDate(myInputSheet.Cells(6+r, 2).Value, CDate(myInputSheet.Cells(6+r, 2).Value), "no recognizable date")
Run Code Online (Sandbox Code Playgroud)
你可能现在,我有时用已经认识.Value和somethimes .Value2在上面的代码片断.有关这方面的更多信息,您可能需要阅读以下内容:.text,.value和.value2之间的区别是什么?
顺便说一句:时间也存储为数字.事实上,他们被保存为一天中的一小部分.因此,数字0.5相当于半天,那将是中午12:00.同时,早上9点是0.375和18点或下午6点相当于0.75.
| 归档时间: |
|
| 查看次数: |
1996 次 |
| 最近记录: |