- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
大家好,感谢您的关注。
(我已经用谷歌搜索了我的问题,请理解我的问题与那些要求读取不多的大型 excel 文件或写入 Excel 文件的最佳方法的问题不同,我只想阅读它们)
目前我正在开发一个小程序,它的目的可以定义为读取和分析 excel 格式的几到几百甚至可能几千个日志文件之间的任何地方,以收集统计结果,现在我知道了将日志保存为 Excel 的决定很奇怪,但我不是那个决定的人,这对我来说就是这样。
正如您可能猜到的那样,我打算做的是从每个 excel 文件中读取数据,并在处理之前将其作为 C# 模型类加载到内存中。我读取文件 excel 文件的方式基于我使用 Interop、打开 Excel 文件、从我需要的几个单元格中读取数据然后关闭该文件并移至下一个并让另一个线程处理处理的经验。
我已经尝试使用 Interop 测试我的方法,但速度非常慢。这是处理阅读的部分代码
List<string> strings = new List<string>();
Microsoft.Office.Interop.Excel.Application xlApp = null;
Microsoft.Office.Interop.Excel.Workbook xlWorkBook = null;
Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet = null;
Microsoft.Office.Interop.Excel.Range range = null;
try
{
string str;
int rCnt;
int cCnt;
int row = 0;
int column = 0;
xlApp = new Microsoft.Office.Interop.Excel.Application();
xlWorkBook = xlApp.Workbooks.Open(path, 0, true, 5, "", "", true,
Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
range = xlWorkSheet.UsedRange;
row = range.Rows.Count;
column = range.Columns.Count;
strings.Clear();
for (rCnt = 1; rCnt <= row; rCnt++)
{
for (cCnt = 1; cCnt <= column; cCnt++)
{
str = (range.Cells[rCnt, cCnt] as Microsoft.Office.Interop.Excel.Range).Value2?.ToString();
if (!string.IsNullOrEmpty(str))
strings.Add(str);
}
}
xlWorkBook.Close(true);
xlApp.Quit();
}
catch (Exception exception)
{
exception.Log();
}
finally
{
//https://www.add-in-express.com/creating-addins-blog/2013/11/05/release-excel-com-objects/
if (xlWorkBook != null) Marshal.FinalReleaseComObject(xlWorkBook);
if (xlWorkSheet != null) Marshal.FinalReleaseComObject(xlWorkSheet);
if (range != null) Marshal.FinalReleaseComObject(range);
if (xlApp != null) Marshal.FinalReleaseComObject(xlApp);
}
return strings.ToArray();
因此,为了解决我的问题,我希望找到过去遇到过类似问题并找到解决方法的人或回答我的一些问题:
最佳答案
你能使用 nuget 包吗?如果是这样,请查看 ExcelDataReader 库及其 ExcelReaderFactory。 https://www.nuget.org/packages/ExcelDataReader
对于 xls 文件,我会使用 var excelReader = ExcelReaderFactory.CreateBinaryReader(stream)
,然后您可以使用读取器将其读入数据集 var data = reader.AsDataSet() ;
你也可以在读取数据集之前告诉它第一行是否包含列名,例如reader.IsFirstRowAsColumnNames = true;
如果您有 .xlsx 文件,您可以使用 ExcelReaderFactory.CreateOpenXmlReader(stream);
关于c# - 从许多 Excel 文件(xls 格式)中读取数据的理想方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56107723/
从许多帖子中我可以读到有关最大池大小的公式,它取决于 CPU 的数量 + 1。这是一个明确的解释。 但是如果应用程序定义了许多执行器或线程池执行器怎么办。然后我们还必须考虑应用程序共享相同的硬件。这对
我一直在寻找垂直 Accordion 内容 slider 。我找到了一个:http://www.marghoobsuleman.com/jQuery-common-accordion ,而且还不错。我
在 not having a whole bunch of luck 之后找到任何可充当 SNMP 代理的 .NET SNMP 库(可在 OSS 项目中使用 - 这意味着专有库已经过时),我现在正在考
目前我正在考虑: VMWare 管理程序 ESXi 中央操作系统 5.5 内存缓存 1.4.5和依赖 这就是全部。我还需要什么/任何替代品吗? 最佳答案 Memcached在linux上运行的很好,所
我是一名优秀的程序员,十分优秀!