excel文件由第三方应用生成。我正在编写一个实用程序来进一步处理该Excel文件。当我读取包含日期值的列时,我得到的数字字符串如05/02/2016(dd / MM / yyyy)将以42405的形式出现。
我尝试过使用.Text,.Formula,.Value,.Value2 - 所有方法都返回数值。
我知道FromOADateTime,但我的要求是将日期值作为字符串读取,完全按照它在屏幕上的显示方式。
感谢。
编辑1: 当我将列转换为Excel中的文本时,通过使用单元格格式并选择文本,所有日期值甚至在Excel中转换为数值!这有什么线索吗?可能第三方应用程序将数据存储为数值,但Excel会将其显示为屏幕上的日期字符串。我想读一下屏幕上显示的值。
编辑2:
此列中的所有日期值都没有此问题。我的第一印象是,在将日期值写入Excel时,第三方应用程序不一致。但我无法控制它。
编辑3: 以下是下载文件的链接:http://wikisend.com/download/316956/Prob.xls。在这个文件中,我需要读取B列中的所有日期值作为从第13行开始的文本
这是指向我机器中的外观截图的链接:http://wikisend.com/download/443994/Screenshot1.jpg
编辑4: 在NineBerry的回答的帮助下找到了我的代码中的罪魁祸首:在阅读Text属性之前的几行,我调用了ws.Columns.ClearFormats()和ws.Rows.ClearFormats();
我需要这样做:How to get the range of occupied cells in excel sheet ...,以便正确获取工作表中的使用范围!
原来的问题已经解决了。现在问题是如何使用ws.UsedRange而不调用ClearFormats()来正确获取已使用单元格的范围。
我的具体要求是获得在任何单元格中使用数据的已使用ROWS的范围,直到Col H.我不需要Excel中的整个UsedRange,Col H中的UsedRange对我来说已经足够了。
对此有何解决方案?或者我应该发布新帖子吗?
答案 0 :(得分:1)
使用Text
属性 提供将向用户显示的字符串。
private void button_Click(object sender, EventArgs e)
{
string path = @"C:\Test.xlsx";
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
Workbook wb = excel.Workbooks.Open(path);
Worksheet excelSheet = wb.ActiveSheet;
//Read a specific cell
Range cell = excelSheet.Cells[1, 3] as Range;
// Show text content
MessageBox.Show(cell.Text);
wb.Close();
}
如果您在此处看不到Excel中显示的内容,则必须向我们提供更多详细信息。也许提供一个示例Excel文件,其中单元格的行为不符合预期。
此代码输出文件中第二列的内容,与Excel中显示的完全相同:
private void button1_Click(object sender, EventArgs e)
{
string path = @"D:\Downloads\Windows\Prob.xls";
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
Workbook wb = excel.Workbooks.Open(path);
Worksheet excelSheet = wb.ActiveSheet;
//Read a specific cell
for (int i = 1; i <= 150; i++ )
{
Range cell = excelSheet.Cells[i + 1, 2] as Range;
textBox1.AppendText(cell.Text + Environment.NewLine);
}
wb.Close();
}
如果您没有看到,那么您应该检查您是否正在阅读正确的文件,并且在阅读之前不要自己修改文件。