【问题标题】:C# Excel Interop: can't read all data from excelC# Excel 互操作:无法从 excel 中读取所有数据
【发布时间】:2012-05-16 08:54:15
【问题描述】:

我在从 xlsx 文件中读取日期时遇到了一些问题,我的意思是它没有读取单元格中的所有信息,例如我在一个单元格中有以下信息:

"4876112","3456151712","345627712","3125HPC21017500011","34131HPC210349014112","35134HPC210273008212"

当我查看 DataTable 时,我只在行中看到此信息

"4876112","3456151712","345627712",

这是我的代码:

Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook workbook = excelApp.Workbooks.Open(input, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

string sheetname = "";

foreach (Microsoft.Office.Interop.Excel.Worksheet sheet in workbook.Sheets)
{
    sheetname = sheet.Name;
    break;
}

string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", input);
string query = String.Format("select * from [{0}$]", sheetname);
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString);
DataSet ds = new DataSet();
dataAdapter.Fill(ds);
tabela = ds.Tables[0];

我输入了 Excel 的单元格并将其格式化为文本,并且工作正常。我可以以编程方式将所有单元格格式更改为文本吗? 谢谢!

【问题讨论】:

  • 既然已经使用Interop for Excel,为什么还要使用OleDB 来读取excel 数据?您可以从“工作表”中读取数据。
  • 旁注:sheetname = workbook.Sheets[0].Name 会不会更简单(而不是 foreachbreak)?

标签: c# excel excel-interop


【解决方案1】:

如果您希望将工作表中的所有单元格都设置为文本格式,您可以这样做:

sheet.Cells.NumberFormat = "@";

【讨论】:

  • 这是因为这修改了文档。你在使用后关闭 xls 吗?如果是这种情况,您可以在不保存的情况下关闭它:workbook.Close(false, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
【解决方案2】:

以下是如何使用 C# 访问 Excel 的概要。最好使用 C# 4.0 或更高版本,因为它具有更好的 COM 互操作性。

using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
using System.Runtime.InteropServices;

...
//create objects
Excel.Application oXL;
Excel._Workbook oWB;
Excel._Worksheet oSheet;

oXL         = new Excel.Application();
oXL.Visible = false;
oWB         = oXL.Workbooks.Open(template_file);
oSheet      = (Excel._Worksheet)oWB.Worksheets[1];

//set cell values
oSheet.Cells[1, 1] = "my value here";

//set formatting
oSheet.get_Range("A1", "A15").Font.Bold         = true;
oSheet.get_Range("A1", "A15").VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
oSheet.get_Range("A1", "A15").ColumnWidth       = 20;

//close 
oXL.ActiveWorkbook.Close();
Marshal.ReleaseComObject(oWB);
Marshal.ReleaseComObject(oSheet);
Marshal.ReleaseComObject(oXL);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多