我是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()
请告诉我该怎么做。我将不胜感激。
答案 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;
> }
>
>
>
> }
>
> }