然后从这个range里要把每个单元格的数据再取出来使用,用了range[1,1].value2为什么不行,运行的时候总是出错,另外试了range.cells[1,1].value 也一样不行
7 个解决方案
#1
报什么错?
为什么要先取所有单元格的范围? 一个个取有什么问题吗?
为什么要先取所有单元格的范围? 一个个取有什么问题吗?
#2
注意大小写啊
Value,Value2
Value,Value2
#3
.value2取出来的值是单元格类型,若是字符串类型,要.value2.ToString();
当然若你的get_Range范围内的单元格没有合并的话,返回的会是一个代表你的单元格对象范围信息的值,类似system[object,object]这种样子。
若是一个单元格那肯定是可以的
Range range= .get_Range("A1","A1");
string str=range.value2.tostring().trim();
trim()是去除多余空格,最好加上
当然若你的get_Range范围内的单元格没有合并的话,返回的会是一个代表你的单元格对象范围信息的值,类似system[object,object]这种样子。
若是一个单元格那肯定是可以的
Range range= .get_Range("A1","A1");
string str=range.value2.tostring().trim();
trim()是去除多余空格,最好加上
#4
师范代码
/// <summary>
/// 读取一个连续区域的Cell的值(矩形区域,包含一行或一列,或多行,多列),返回一个一维字符串数组。
/// </summary>
/// <param name="StartCell">StartCell是要写入区域的左上角单元格</param>
/// <param name="EndCell">EndCell是要写入区域的右下角单元格</param>
/// <returns>值的集合</returns>
public string[] getCellsValue(string StartCell, string EndCell)
{
string[] sValue = null;
//try
//{
xlRange = (Excel.Range)xlSheet.get_Range(StartCell, EndCell);
sValue = new string[xlRange.Count];
int rowStartIndex = ((Excel.Range)xlSheet.get_Range(StartCell, StartCell)).Row; //起始行号
int columnStartIndex = ((Excel.Range)xlSheet.get_Range(StartCell, StartCell)).Column; //起始列号
int rowNum = xlRange.Rows.Count; //行数目
int columnNum = xlRange.Columns.Count; //列数目
int index = 0;
for (int i = rowStartIndex; i < rowStartIndex + rowNum; i++)
{
for (int j = columnStartIndex; j < columnNum + columnStartIndex; j++)
{
//读到空值null和读到空串""分别处理
sValue[index] = ((Excel.Range)xlSheet.Cells[i, j]).Text.ToString();
index++;
}
}
//}
//catch (Exception e)
//{
// CloseXlApp();
// throw new Exception(e.Message);
//}
return (sValue);
}
#5
string ss = ((Microsoft.Office.Interop.Excel.Range)xSheet.Cells[1, 1]).Value2.ToString();
另外Excel没有[i,j](i=0或者j=0);
另外Excel没有[i,j](i=0或者j=0);
#6
public static DataSet ReadExcel2003(string excelPath)
{
DataSet ds = new DataSet();
//string workName = "";
Microsoft.Office.Interop.Excel.Application xApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
xApp.Visible = false;
//得到WorkBook对象, 可以用两种方式之一: 下面的是打开已有的文件
Microsoft.Office.Interop.Excel.Workbook xBook = xApp.Workbooks._Open(excelPath,
Missing.Value, Missing.Value, Missing.Value, Missing.Value
, Missing.Value, Missing.Value, Missing.Value, Missing.Value
, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
//xBook=xApp.Workbooks.Add(Missing.Value);//新建文件的代码
//指定要操作的Sheet,两种方式:
Microsoft.Office.Interop.Excel.Sheets xSheets = xBook.Sheets;
for (int k = 1; k <= xSheets.Count; k++)
{
Microsoft.Office.Interop.Excel.Worksheet xSheet = (Microsoft.Office.Interop.Excel.Worksheet)xSheets[k];
//查找列数
int rowCount = 0;
for (int i = 1; i < xSheet.Rows.Count; i++)
{
if (((Microsoft.Office.Interop.Excel.Range)xSheet.Cells[i, 1]).Value2 == null)
{
rowCount = i;
break;
}
}
//查找行数
int columnCount = 0;
for (int i = 1; i < xSheet.Columns.Count; i++)
{
if (((Microsoft.Office.Interop.Excel.Range)xSheet.Cells[2, i]).Value2 == null)
{
columnCount = i;
break;
}
}
DataTable dt = new DataTable();
for (int i = 1; i < columnCount; i++)
{
string ss = ((Microsoft.Office.Interop.Excel.Range)xSheet.Cells[1, i]).Value2.ToString();
if (ss != "")
{
dt.Columns.Add(ss);
}
else
{
dt.Columns.Add("Column" + i);
}
}
for (int i = 2; i < rowCount; i++)
{
DataRow dr = dt.NewRow();
for (int j = 1; j < columnCount; j++)
{
dr[j - 1] = ((Microsoft.Office.Interop.Excel.Range)xSheet.Cells[i, j]).Value2 == null ? "" : ((Microsoft.Office.Interop.Excel.Range)xSheet.Cells[i, j]).Value2.ToString();
}
dt.Rows.Add(dr);
}
ds.Tables.Add(dt);
}
try
{
xBook.Save();
//Microsoft.Office.Interop.Excel.Worksheet xSheet2=(Microsoft.Office.Interop.Excel.Worksheet)xApp.ActiveSheet;
xBook.Close(false, false, Missing.Value);
xApp.Quit();
}
catch { }
IntPtr t = new IntPtr(xApp.Hwnd);
int m = 0;
GetWindowThreadProcessId(t, out m);
Process p = Process.GetProcessById(m);
p.Kill();
return ds;
}
这个可以读取多个excel的工作簿返回dataset
#7
上面需要添加引用
using System.Runtime.InteropServices;
注册一个方法
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr intptr, out int ID);
using System.Runtime.InteropServices;
注册一个方法
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr intptr, out int ID);
#1
报什么错?
为什么要先取所有单元格的范围? 一个个取有什么问题吗?
为什么要先取所有单元格的范围? 一个个取有什么问题吗?
#2
注意大小写啊
Value,Value2
Value,Value2
#3
.value2取出来的值是单元格类型,若是字符串类型,要.value2.ToString();
当然若你的get_Range范围内的单元格没有合并的话,返回的会是一个代表你的单元格对象范围信息的值,类似system[object,object]这种样子。
若是一个单元格那肯定是可以的
Range range= .get_Range("A1","A1");
string str=range.value2.tostring().trim();
trim()是去除多余空格,最好加上
当然若你的get_Range范围内的单元格没有合并的话,返回的会是一个代表你的单元格对象范围信息的值,类似system[object,object]这种样子。
若是一个单元格那肯定是可以的
Range range= .get_Range("A1","A1");
string str=range.value2.tostring().trim();
trim()是去除多余空格,最好加上
#4
师范代码
/// <summary>
/// 读取一个连续区域的Cell的值(矩形区域,包含一行或一列,或多行,多列),返回一个一维字符串数组。
/// </summary>
/// <param name="StartCell">StartCell是要写入区域的左上角单元格</param>
/// <param name="EndCell">EndCell是要写入区域的右下角单元格</param>
/// <returns>值的集合</returns>
public string[] getCellsValue(string StartCell, string EndCell)
{
string[] sValue = null;
//try
//{
xlRange = (Excel.Range)xlSheet.get_Range(StartCell, EndCell);
sValue = new string[xlRange.Count];
int rowStartIndex = ((Excel.Range)xlSheet.get_Range(StartCell, StartCell)).Row; //起始行号
int columnStartIndex = ((Excel.Range)xlSheet.get_Range(StartCell, StartCell)).Column; //起始列号
int rowNum = xlRange.Rows.Count; //行数目
int columnNum = xlRange.Columns.Count; //列数目
int index = 0;
for (int i = rowStartIndex; i < rowStartIndex + rowNum; i++)
{
for (int j = columnStartIndex; j < columnNum + columnStartIndex; j++)
{
//读到空值null和读到空串""分别处理
sValue[index] = ((Excel.Range)xlSheet.Cells[i, j]).Text.ToString();
index++;
}
}
//}
//catch (Exception e)
//{
// CloseXlApp();
// throw new Exception(e.Message);
//}
return (sValue);
}
#5
string ss = ((Microsoft.Office.Interop.Excel.Range)xSheet.Cells[1, 1]).Value2.ToString();
另外Excel没有[i,j](i=0或者j=0);
另外Excel没有[i,j](i=0或者j=0);
#6
public static DataSet ReadExcel2003(string excelPath)
{
DataSet ds = new DataSet();
//string workName = "";
Microsoft.Office.Interop.Excel.Application xApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
xApp.Visible = false;
//得到WorkBook对象, 可以用两种方式之一: 下面的是打开已有的文件
Microsoft.Office.Interop.Excel.Workbook xBook = xApp.Workbooks._Open(excelPath,
Missing.Value, Missing.Value, Missing.Value, Missing.Value
, Missing.Value, Missing.Value, Missing.Value, Missing.Value
, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
//xBook=xApp.Workbooks.Add(Missing.Value);//新建文件的代码
//指定要操作的Sheet,两种方式:
Microsoft.Office.Interop.Excel.Sheets xSheets = xBook.Sheets;
for (int k = 1; k <= xSheets.Count; k++)
{
Microsoft.Office.Interop.Excel.Worksheet xSheet = (Microsoft.Office.Interop.Excel.Worksheet)xSheets[k];
//查找列数
int rowCount = 0;
for (int i = 1; i < xSheet.Rows.Count; i++)
{
if (((Microsoft.Office.Interop.Excel.Range)xSheet.Cells[i, 1]).Value2 == null)
{
rowCount = i;
break;
}
}
//查找行数
int columnCount = 0;
for (int i = 1; i < xSheet.Columns.Count; i++)
{
if (((Microsoft.Office.Interop.Excel.Range)xSheet.Cells[2, i]).Value2 == null)
{
columnCount = i;
break;
}
}
DataTable dt = new DataTable();
for (int i = 1; i < columnCount; i++)
{
string ss = ((Microsoft.Office.Interop.Excel.Range)xSheet.Cells[1, i]).Value2.ToString();
if (ss != "")
{
dt.Columns.Add(ss);
}
else
{
dt.Columns.Add("Column" + i);
}
}
for (int i = 2; i < rowCount; i++)
{
DataRow dr = dt.NewRow();
for (int j = 1; j < columnCount; j++)
{
dr[j - 1] = ((Microsoft.Office.Interop.Excel.Range)xSheet.Cells[i, j]).Value2 == null ? "" : ((Microsoft.Office.Interop.Excel.Range)xSheet.Cells[i, j]).Value2.ToString();
}
dt.Rows.Add(dr);
}
ds.Tables.Add(dt);
}
try
{
xBook.Save();
//Microsoft.Office.Interop.Excel.Worksheet xSheet2=(Microsoft.Office.Interop.Excel.Worksheet)xApp.ActiveSheet;
xBook.Close(false, false, Missing.Value);
xApp.Quit();
}
catch { }
IntPtr t = new IntPtr(xApp.Hwnd);
int m = 0;
GetWindowThreadProcessId(t, out m);
Process p = Process.GetProcessById(m);
p.Kill();
return ds;
}
这个可以读取多个excel的工作簿返回dataset
#7
上面需要添加引用
using System.Runtime.InteropServices;
注册一个方法
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr intptr, out int ID);
using System.Runtime.InteropServices;
注册一个方法
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr intptr, out int ID);