我在用c#编程来取得excel单元格中的文本时,如果单元格中的文本过长,就会发生读取截断,即只有一部分内容被取出来了。望大虾帮助解决啊,小弟在这先谢谢了。
读取excel的代码如下:
        private static string ReadCell(Excel.Worksheet Sheet, object RowIndex, object ColumnIndex)
        {
            Excel.Range rang;
            rang = (Excel.Range)Sheet.Cells[RowIndex, ColumnIndex];            return  rang.Text.ToString();
        }PS:上网去查,有一个修改注册表的方法,我试验了一下,不好用,并且我也不想去修改注册表,大虾们还有别的什么好方法没?小弟雪地里裸求

解决方案 »

  1.   

    建议lz用ado.net的方式来读取excel
      

  2.   

    if (MessageBox.Show("导入采集未成功的高校url,请首先导出已经采集完的高校信息!并确保当前省份与您要导入excel中省份相同.", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK)
                {
                    //去处
                    this.dataGridView1.Rows.Clear();
                    OpenFileDialog openFileDialog1 = new OpenFileDialog();
                    openFileDialog1.ShowDialog();
                    string Path = openFileDialog1.FileName;
                    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;";
                    OleDbConnection conn = new OleDbConnection(strConn);
                    string strExcel = "";
                    strExcel = "select * from [sheet1$]";
                    OleDbCommand cmd = new OleDbCommand(strExcel, conn);
                    try
                    {
                        conn.Open();
                        OleDbDataReader reader = cmd.ExecuteReader();
                        while (reader.Read())
                        {
                            string schoolName = reader[0].ToString().Trim();//读取Excel单元格文本
                            string schoolUrl = reader[1].ToString().Trim();
                            if (!string.IsNullOrEmpty(schoolName) && !string.IsNullOrEmpty(schoolUrl))
                            {
                                int index2 = dataGridView1.Rows.Add();
                                DataGridViewRow newrow1 = dataGridView1.Rows[index2];
                                newrow1.Cells[0].Value = schoolName;//院校名称
                                    newrow1.Cells[1].Value = schoolUrl;
                                newrow1.Cells[2].Value = "就绪";//采集状
                               }
                        }
                        MessageBox.Show("excel 导入成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    catch (Exception ex)
                    {                    MessageBox.Show("导入excel出错."+"\n"+ex.Message);
                    }
                    finally
                    {
                        conn.Close();
                    }
                    conn.Close();  
                }
            }
      

  3.   

    参考:http://blog.csdn.net/gisfarmer/archive/2009/01/09/3738959.aspx
      

  4.   

    ado.net的方式来读取excel//导入命名空间using System.Data.OleDb;//ADO.NET读取数据String XslPath = Server.MapPath(Request.QueryString["name"].ToString()); // 绝对物理路径String ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0;\";data source=" + XslPath;String Sqls = "SELECT * FROM [Sheet1$]";OleDbDataAdapter da = new OleDbDataAdapter(Sqls, ConnStr);Dadaset ds = new Dataset();da.Fill(ds); //将Excel数据填充到DATASET
      

  5.   

    然后你就可以绑定到控件了,比如datagridview
      

  6.   

    应该不会啊  可能是你的excel的格式的问题
      

  7.   

    你把被截断的文本复制到第一行去.看看第一行会不会被截断
    如果不会说明就是Excel设置问题.
    在注册表中的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel中把TypeGuessRows设为0
    看看是否还有这问题.
      

  8.   

    问题已经解决,和大家分享。
    将读取excel单元格的代码修改如下:
            private static string ReadCell(Excel.Worksheet Sheet, object RowIndex, object ColumnIndex)
            {
                Excel.Range rang;
                string temp;
                try
                {
                    rang = (Excel.Range)Sheet.Cells[RowIndex, ColumnIndex];
                    temp = rang.Value2.ToString();
                }
                catch
                {
                    return "";
                }            return temp;            //return  rang.Text.ToString();
            }
    以上代码测试在单元格文本不超过255行的时候,读取正常;
    我的excel不能写文本超过255行,所以在文本超过255行的情况没有进行测试。To;fuqiang19871117 和rollng
    谢谢详细解答,你们的方法我没有试,但是仍然感谢
      

  9.   

    遇到类似问题还没解决
    C10; C11; C12; C13; C14; C144; C15; C150; C151; C153; C154; C155; C158; C159; C16; C161; C162; C164; C165; C167; C168; C17; C170; C18; C190; C191; C193; C194; C195; C196; C197; C198; C199; C200; C201; C204; C205; C207; C208; C209; C21; C210; C211; C212; C213; C214; C218; C219; C22; C221; C222; C223; C224; C225; C226; C227; C234; C235; C237; C238; C239; C24; C240; C241; C242; C246; C248; C249; C25; C250; C251; C252; C253; C256; C257; C258; C259; C26; C260; C27; C28; C29; C30; C31; C327; C333; C334; C336; C337; C338; C341; C342; C344; C345; C347; C348; C35; C350; C351; C353; C36; C38; C39; C40; C41; C42; C43; C44; C506; C507; C508; C509; C51; C510; C52; C522; C523; C54; C55; C56; C57; C58; C588; C589; C59; C590; C591; C63; C65; C66; C67; C68; C69; C7; C70; C73; C74; C75; C76; C77; C8; C84; C865; C866; C867; C868; C869; C870; C871; C874; C882; C883; C884; C885; C886; C887; C888; C889; C890; C891; C892; C893; C894; C895; C896; C897; C898; C899; C900; C901; CATE4
    被截断成
    C10; C11; C12; C13; C14; C144; C15; C150; C151; C153; C154; C155; C158; C159; C16; C161; C162; C164; C165; C167; C168; C17; C170; C18; C190; C191; C193; C194; C195; C196; C197; C198; C199; C200; C201; C204; C205; C207; C208; C209; C21; C210; C211; C212; C
    代码
     string strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\\303-171.xlsx;Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;\"";
                OleDbConnection myConn = new OleDbConnection(strCon);
     OleDbDataAdapter myCommand1 = new OleDbDataAdapter(strCom, myConn);
    myConn.Open();
       OleDbDataAdapter myCommand1 = new OleDbDataAdapter(strCom, myConn);
     ds1 = new DataSet();
     myCommand1.Fill(ds1, "[HcmServlet5419475b_LCC 2nd sour$]");