我的应用程序需要从excel文件中读取数据.我使用.Net和c#进行开发.我无法在系统中安装MS office.因为我的应用程序无法读取excel文件并在加载Excel的dll时抛出错误.
如何在未安装ms office的系统中访问我的应用程序中的excel文件?
我正在尝试使用Microsoft.Office.Interop.Excel命名空间打开Excel文件(XSL或CSV,但遗憾的是不是 XSLX)并将其导入DataSet.我无法控制工作表或列名,因此我需要允许对它们进行更改.
我以前尝试过这种OLEDB方法,并且遇到了很多问题(错误,速度慢,并且需要事先了解Excel文件的架构),所以我想避免再次这样做.我想要做的是使用Microsoft.Office.Interop.Excel将工作簿直接导入DataSet,或者循环遍历工作表并将每个工作表加载到DataTable中.
信不信由你,我很难找到资源.在StackOverflow上进行的一些搜索发现大多数人都试图进行反向(DataSet => Excel)或OLEDB技术.谷歌没有多大帮助.
public void Load(string filename, Excel.XlFileFormat format = Excel.XlFileFormat.xlCSV)
{
app = new Excel.Application();
book = app.Workbooks.Open(Filename: filename, Format: format);
DataSet ds = new DataSet();
foreach (Excel.Worksheet sheet in book.Sheets)
{
DataTable dt = new DataTable(sheet.Name);
ds.Tables.Add(dt);
//??? Fill dt from sheet
}
this.Data = ds;
}
Run Code Online (Sandbox Code Playgroud)
我可以一次导入整本书,或者一次循环一张.我可以使用Interop.Excel执行此操作吗?
我正在编写一个应用程序,我需要从数据库中检索一些行并将它们转储到Excel电子表格中.我正在使用Linq来检索这些行.
是否可以将这些行直接转储到Excel工作表中的对应部分(其中Excel中的一个单元格对应于数据库中的一个单元格)?
我想用控制台应用程序C#打开一个现有的excel文件并向其中添加内容.NPOI 2.1.1.0
我的第一种方法是简单地为最后一个单元格添加一个值我解决了它将解决我的另一个问题.
这将使用新内容正确读取文件,但不会保存它.
输出:
"无法访问已关闭的文件."
HSSFWorkbook hssfwb;
using (FileStream file = new FileStream(@"c:\testfile.xls", FileMode.Open, FileAccess.ReadWrite))
{
hssfwb = new HSSFWorkbook(file);
ISheet sheet = hssfwb.GetSheetAt(0);
IRow row = sheet.GetRow(0);
sheet.CreateRow(row.LastCellNum);
ICell cell = row.CreateCell(row.LastCellNum);
cell.SetCellValue("test");
for (int i = 0; i < row.LastCellNum; i++)
{
Console.WriteLine(row.GetCell(i));
}
hssfwb.Write(file);
file.Close();
}
Run Code Online (Sandbox Code Playgroud)
我确实尝试添加以下内容但它导致了一个无法打开的空白文件.
MemoryStream mstream = new MemoryStream();
hssfwb.Write(mstream);
byte[] bytes = new byte[mstream.Length];
mstream.Read(bytes, 0, (int)mstream.Length);
file.Write(bytes, 0, bytes.Length);
file.Close();
mstream.Close();
Run Code Online (Sandbox Code Playgroud)
我还尝试将hssfwb单独放在使用范围内,将filemode更改为Append/openorcreate/truncate,如果写入检查则添加没有任何结果.
但是,一种解决方案是读取文件,将其转换为数据表,创建新的excel文件并使用数据填充它.
我究竟做错了什么?任何人都可以对此有所了解吗?我徒劳地看着Npoi示例包.