VSTO vb.net 往excel单元格写值失败的奇怪问题

腰疼怎么办 2018-12-10 06:09:38
做了一个word2013-2016 VSTO add-in(还未完成). 基本功能是根据用户的选择往excel里写值,写“True”或“False”。Excel文件的build action是Embedded Resource, copy to output directory选的是copy always。 界面是在一个窗体上有一个tab控件,其中一个选项卡上有两个radio button,客户只能选择其中一个。今天发现了一个奇怪问题。名字为output2的button被check后,xlSheet2里的C36被改成true了,但xlSheet1里的C136,C137却没有被改成true。但是,名字为output3的button被check后,xlsheet1里的C136,C137却能被改成true。这是有什么bug吗?
而且还有另外一个怪事,偶尔(大概100次里能有一次的样子)visual studio会报一个错误,说某个单元格被保护,但其实整个excel都没有被保护,所有的cell都没有被lock。这让我怀疑是不是有什么bug。

Module Module1
Public exeDir As New IO.FileInfo(Reflection.Assembly.GetExecutingAssembly.FullName)
Public xlPath = IO.Path.Combine(exeDir.DirectoryName, "Database.xlsx")
Public xlApp As Microsoft.Office.Interop.Excel.Application = Nothing
Public xlBook As Microsoft.Office.Interop.Excel.Workbook
Public xlSheet1 As Microsoft.Office.Interop.Excel.Worksheet
Public xlSheet2 As Microsoft.Office.Interop.Excel.Worksheet
End Module

Public Class Heater
Sub Setup_Htr_DB()
'Output2
xlSheet1.Range("C136").Value2 = Output2.Checked.ToString
xlSheet1.Range("C137").Value2 = Output2.Checked.ToString
xlSheet2.Range("C36").Value2 = Output2.Checked.ToString
'Output3
xlSheet1.Range("C136").Value = Output3.Checked.ToString
xlSheet1.Range("C137").Value = Output3.Checked.ToString
xlSheet2.Range("C37").Value = Output3.Checked.ToString
End Sub
Private Sub PB_Preview_Click(sender As Object, e As EventArgs) Handles PB_Preview.Click
xlApp = New Microsoft.Office.Interop.Excel.Application With {
.DisplayAlerts = False,
.Visible = False
}
xlBook = xlApp.Workbooks.Open(xlPath)
xlSheet1 = xlBook.Sheets(1)
xlSheet2 = xlBook.Sheets(2)
Setup_Htr_DB()
End Sub
End Class

...全文
192 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
腰疼怎么办 2018-12-11
  • 打赏
  • 举报
回复
唉,问题找到了。一个愚蠢的错误。Output2被check的话,Output3肯定不会被check。所以C136和C137的值又被Output3写成False了。唉。
yishumei 2018-12-11
  • 打赏
  • 举报
回复
引用 1 楼 liuperfe 的回复:
木有人碰到这种bug问题吗?
楼主修改一下Setup_Htr_DB再试试看。 Sub Setup_Htr_DB() 'Output2 xlSheet1.Activate() xlSheet1.Range("C136").Value2 = Output2.Checked.ToString xlSheet1.Range("C137").Value2 = Output2.Checked.ToString xlSheet2.Activate() xlSheet2.Range("C36").Value2 = Output2.Checked.ToString 'Output3 xlSheet1.Activate() xlSheet1.Range("C136").Value = Output3.Checked.ToString xlSheet1.Range("C137").Value = Output3.Checked.ToString xlSheet2.Activate() xlSheet2.Range("C37").Value = Output3.Checked.ToString End Sub
腰疼怎么办 2018-12-11
  • 打赏
  • 举报
回复
木有人碰到这种bug问题吗?

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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