如何读取excel文件并只选择那些包含数据的单元格-不带格式,不带空格,只选文本或数字。
我知道我可以像这样读取电子表格:我如何才能只对这些单元格进行“选择”并进行复制。
Excel.Application excelApp = new Excel.Application();
if (excelApp != null)
{
Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(@"C:\test.xls", 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelWorkbook.Sheets[1];
Excel.Range excelRange = excelWorksheet.UsedRange;
int rowCount = excelRange.Rows.Count;
int colCount = excelRange.Columns.Count;
for (int i = 1; i <= rowCount; i++)
{
for (int j = 1; j <= colCount; j++)
{
Excel.Range range = (excelWorksheet.Cells[i, 1] as Excel.Range);
string cellValue = range.Value.ToString();
//do anything
}
}
excelWorkbook.Close();
excelApp.Quit();
使用您现有的方法,您缺少的是将值与string.empty进行比较,并知道您可以使用Excel.Application.Union组合范围。
考虑一下这段伪代码(也就是我没有运行它)。
需要注意的是,如果你想要更高的精度(比显示给用户的excel格式更高),你应该使用.Value2而不是.Value。
public void CopyValues()
{
Excel.Application excelApp = new Excel.Application();
if (excelApp != null)
{
Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(@"C:\test.xls", 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelWorkbook.Sheets[1];
Excel.Range excelRange = excelWorksheet.UsedRange;
int rowCount = excelRange.Rows.Count;
int colCount = excelRange.Columns.Count;
Excel.Range copyRange = null;
for (int i = 1; i <= rowCount; i++)
{
for (int j = 1; j <= colCount; j++)
{
Excel.Range range = (excelWorksheet.Cells[i, j] as Excel.Range);
if (range.Value.ToString().Trim() != string.Empty)
{
if (copyRange == null)
{
copyRange = range;
}
else
{
//Its got somehting so union it in
copyRange = excelApp.Union(copyRange, range);
}
}
}
}
//Copy to clipboard
copyRange.Copy();
excelWorkbook.Close();
excelApp.Quit();
}
}

