在vb.net中转换对象数据类型

时间:2014-05-25 11:10:29

标签: vb.net

我是VB.net 2010的新手。我正在尝试从excel读取和编写我的项目。目前我正面临数据类型转换问题。我无法将对象数据类型转换为整数数据类型以进行计算。它一直给我错误: “从字符串”Serial Up Of Layup“转换为”Integer“类型无效”

这是我的代码。 (在检查代码之前一定要添加引用,项目添加引用-COM对象-Microsoft Excel COM对象12.0)

Imports System.IO
Imports Excel = Microsoft.Office.Interop.Excel

Imports System.Drawing

Imports System.Windows.Forms

Imports Microsoft.Office

Imports Microsoft.Office.Interop.Excel


Public NumberofLayupsinStackingLibrary As Object

Public path As String = Directory.GetCurrentDirectory()

Public xlApp As Excel.Application

Public xlWorkBook As Excel.Workbook

Public xlWorkSheet As Excel.Worksheet


xlApp = New Excel.ApplicationClass

xlWorkBook = xlApp.Workbooks.Open(path + "\StackingLibrary")

xlWorkSheet = xlWorkBook.Worksheets("sheet1")

NumberofLayupsinStackingLibrary = xlWorkSheet.Cells(1, 1).value

Dim alpha As Integer = CInt(NumberofLayupsinStackingLibrary) - 1

xlWorkBook.Close(SaveChanges:=False)

xlApp.Quit()

请告诉我该怎么做。我将不胜感激。

2 个答案:

答案 0 :(得分:1)

错误消息

  

从字符串"转换序列号&#34>转换输入'整数'无效

基本上说明了一切:

您正尝试将值"Serial Number Of Layup"转换为整数。显然,这是不可能的。该文本应代表什么数值?

查看代码后发现,您只有一个整数转换:CInt(NumberofLayupsinStackingLibrary)。进一步阅读代码会显示NumberofLayupsinStackingLibrary已填写xlWorkSheet.Cells(1, 1)

结论:工作表中的单元格1/1包含文本Serial Number Of Layup是一个整数,无法转换为一个整数。您的程序按预期运行。

答案 1 :(得分:0)

使用以下代码从Excel工作表中读取并将其写入gridview。

> using System; using System.Collections.Generic; using System.Linq;
> using System.Web; using System.Web.UI; using
> System.Web.UI.WebControls; using System.Data; using System.Data.Odbc;
> using System.Data.OleDb; using System.IO; using
> System.Web.Script.Services; using System.Web.Services;
> 
> namespace NEWCICR {
>     public partial class newer : System.Web.UI.Page
>     {
>         DataTable dt = new DataTable();
> 
> 
>         //Declare Variable (property)
> 
>         string currFilePath = string.Empty; //File Full Path
>         string currFileExtension = string.Empty;  //File Extension
> 
>         //Page_Load Event, Register Button Click Event
> 
>         protected void Page_Load(object sender, EventArgs e)
>         {
>        this.btnRead.Click += new EventHandler(btnRead_Click);
> 
>         }
> 
>         //Button Click Event  
> 
> 
>         protected void btnRead_Click(object sender, EventArgs e)
>         {
> 
>             Upload();  //Upload File Method
>             if (this.currFileExtension == ".xlsx" || this.currFileExtension == ".xls")
>             {
>                 DataTable dt = ReadExcelToTable(currFilePath);  //Read Excel File (.XLS and .XLSX Format)
>             }
>             else if (this.currFileExtension == ".csv")
>             {
>                 DataTable dt = ReadExcelWithStream(currFilePath);  //Read .CSV File
>             }
> 
> 
> 
>         }
> 
>         ///<summary>
> 
>         ///Upload File to Temporary Category
> 
>         ///</summary>
> 
>         private void Upload()
>         {
>             HttpPostedFile file = this.fileSelect.PostedFile;
>             string fileName = file.FileName;
>             string tempPath = System.IO.Path.GetTempPath();   //Get Temporary File Path
>             fileName = System.IO.Path.GetFileName(fileName); //Get File Name (not including path)
>             this.currFileExtension = System.IO.Path.GetExtension(fileName);   //Get File Extension
>             this.currFilePath = tempPath + fileName; //Get File Path after Uploading and Record to Former Declared Global Variable
>             file.SaveAs(this.currFilePath);  //Upload
>         }
> 
>         ///<summary>
>         ///Method to Read XLS/XLSX File
>         ///</summary>
>         ///<param name="path">Excel File Full Path</param>
>         ///<returns></returns>
> 
>         private DataTable ReadExcelToTable(string path)
>         {
> 
>             //Connection String
> 
>             string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended
> Properties='Excel 8.0;HDR=NO;IMEX=1';";   // Extra blank space cannot
> appear in Office 2007 and the last version. And we need to pay
> attention on semicolon.
> 
>             // string connstring = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + path + ";Extended
> Properties='Excel 8.0;HDR=NO;IMEX=1';";  //This connection string is
> appropriate for Office 2007 and the older version. We can select the
> most suitable connection string according to Office version or our
> program.
> 
>             using (OleDbConnection conn = new OleDbConnection(connstring))
>             {
>                 conn.Open();
>                 DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null,
> null, null, "Table" });  //Get All Sheets Name
>                 string firstSheetName = sheetsName.Rows[0][2].ToString();   //Get the First Sheet Name
>                 string sql = string.Format("SELECT * FROM [{0}],firstSheetName");
>                 //Query String
>                 OleDbDataAdapter ada = new OleDbDataAdapter(sql, connstring);
>                 DataSet set = new DataSet();
>                 ada.Fill(set);
>                 return set.Tables[0];
>             }
>         }
> 
>         ///<summary>
>         ///Method to Read CSV Format
>         ///</summary>
>         ///<param name="path">Read File Full Path</param>
>         ///<returns></returns>
> 
> 
>         private DataTable ReadExcelWithStream(string path)
>         {
> 
>             bool isDtHasColumn = false;   //Mark if DataTable Generates Column
>             StreamReader reader = new StreamReader(path, System.Text.Encoding.Default);  //Data Stream
>             while (!reader.EndOfStream)
>             {
>                 string message = reader.ReadLine();
>                 string[] splitResult = message.Split(new char[] { ',' }, StringSplitOptions.None);  //Read One Row and Separate by Comma,
> Save to Array
>                 DataRow row = dt.NewRow();
>                 for (int i = 0; i < splitResult.Length; i++)
>                 {
>                     if (!isDtHasColumn) //If not Generate Column
>                     {
>                         dt.Columns.Add("column" + i, typeof(string));
>                     }
>                     row[i] = splitResult[i];
>                 }
>                 dt.Rows.Add(row); 
>                 isDtHasColumn = true;  //Mark the Existed Column after Read the First Row, Not Generate Column after Reading Later Rows
>             }
> 
>             
>             GridView1.DataSource = dt;
>             GridView1.DataBind();
>             DataTable js = dt;
> 
> 
>             return dt;
>         }
> 
> 
> 
>     }
> 
> }