在visual basic中保留TextBox文本

时间:2011-09-10 15:39:59

标签: vb.net

我在使用Excel工作簿导入/导出数据时遇到了一些麻烦。例如,我有一个包含3个文本框的表单。

我已经设置了一个简单的Excel工作表,单元格A1,A2和A3已完成。当我运行调试时,只有前两个框填充了Excel数据。

另外,当我更改文本框中的值时,它不会保存回原始电子表格!?!当我尝试打开电子表格以查看保存是否已发生时,会出现只读通知...但我仍然希望能够更改原始工作表,以便在应用程序启动时导入新数据!

我已粘贴下面的代码......我做错了什么?

Public Class Form1

    Dim objExcel As New Excel.Application
    Dim objWorkbook As Excel.Workbook
    Dim objWorksheet As Excel.Worksheet

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        objWorkbook = objExcel.Workbooks.Open("C:\Users\HP\desktop\Book2.xls")
        objWorksheet = CType(objWorkbook.Worksheets.Item("Sheet1"), Excel.Worksheet)
        TextBox1.Text = objWorksheet.Cells(1, 1).text
        TextBox2.Text = objWorksheet.Cells(2, 1).text
        TextBox3.Text = objWorksheet.Cells(3, 1).text
    End Sub

  Private Sub Command1_Click()
        objWorksheet.Cells(1, 1).Value = TextBox1.Text
        objWorksheet.Cells(2, 3).Value = TextBox2.Text
        objWorksheet.Cells(3, 3).Value = TextBox3.Text
    End Sub

   Private Sub Command2_Click()
        objExcel.Application.Quit()
    End Sub

    Private Sub Command3_Click()
        objExcel.SaveAs("C:\Users\HP\desktop\Book2.xls")
    End Sub
End Class

3 个答案:

答案 0 :(得分:0)

设置textbox3的行是未命名的TextBox3.Text = objWorksheet.celss(3,1).text

尝试使用此代码替换您的代码。如果它仍然在fileprotection上抱怨,请在新文件上尝试它,因为旧文件仍然被锁定。     公共类Form1

Dim objExcel As New Excel.Application
Dim objWorkbook As Excel.Workbook
Dim objWorksheet As Excel.Worksheet

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    objWorkbook = objExcel.Workbooks.Open("C:\Temp\Bok3.xlsx")

    objWorksheet = objWorkbook.Worksheets.Item("Sheet1")

    TextBox1.Text = objWorksheet.Cells(1, 1).text
    TextBox2.Text = objWorksheet.Cells(2, 1).text
    TextBox3.Text = objWorksheet.Cells(3, 1).text
    objExcel.Workbooks.Close()
    objExcel.Application.Quit()

End Sub

Private Sub Command1()
    objWorkbook = objExcel.Workbooks.Open("C:\Temp\Bok3.xlsx")

    objWorksheet = objWorkbook.Worksheets.Item("Sheet1")


    objWorksheet.Cells(1, 1).Value = TextBox1.Text
    objWorksheet.Cells(2, 1).Value = TextBox2.Text
    objWorksheet.Cells(3, 1).Value = TextBox3.Text

    objWorkbook.Save()
    objExcel.Workbooks.Close()
    objExcel.Application.Quit()

End Sub
End Class

答案 1 :(得分:0)

您是否尝试使用标准API调用来结束该过程,从而解锁Excel文件。

如果你使用System.Runtime.InteropServices.Marshal.ReleaseComObject(objComObject),程序似乎仍然存在,直到程序关闭,此时Excel进程终止,文件可以打开而不是“只读”。

这是一种方法:

Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Int32, ByVal wMsg As Int32, _
ByVal wParam As Int32, ByVal lParam As Int32) As Int32
    Const WM_QUIT = &H12

在您的代码中,保存并退出后,请调用PostMessage

PostMessage(objExcel.Hwnd, WM_QUIT, 0, 0)

该过程将结束,从而释放锁定。我以前遇到过这个问题,互联网上有很多东西。某些版本的ReleaseComObject可以正常工作,但它们似乎只能在XP之后的版本上运行,而且它们似乎在XP版本上运行良好。没有多大意义,但我似乎唯一能找到工作的是PostMessage声明。

祝你好运......你不是那里唯一的人。只需在Bing中搜索“excel.application process release”,您就会对所发现的内容感到惊讶!!!

答案 2 :(得分:0)

如果您保存工作表而不是工作簿,它似乎工作正常。这假设您只需要保存当前工作表。

Public Class Form1

Dim objExcel As New Excel.Application
Dim objWorksheet As Excel.Worksheet
Dim objWorkbook As Excel.Workbook

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    objWorkbook = objExcel.Workbooks.Open("C:\Users\HP\desktop\Book2.xls")

    objWorksheet = CType(objWorkbook.Worksheets.Item("Sheet1"), Excel.Worksheet)

    TextBox1.Text = objWorksheet.Cells(1, 1).text
    TextBox2.Text = objWorksheet.Cells(2, 1).text
    TextBox3.Text = objWorksheet.Cells(3, 1).text
End Sub

Private Sub Command1_Click() Handles Button1.Click

    objWorksheet.Cells(1, 3).Value = TextBox1.Text
    objWorksheet.Cells(2, 3).Value = TextBox2.Text
    objWorksheet.Cells(3, 3).Value = TextBox3.Text

    objWorksheet.SaveAs("C:\Users\HP\desktop\Book2.xls")
    objExcel.Workbooks.Close()
    objExcel.Application.Quit()

End Sub

End Class