public async Task <List <Content> > GetContentsByFileAsync(string filePath, Site site, Channel channel) { var contents = new List <Content>(); var styles = ColumnsManager.GetContentListStyles(await _databaseManager.TableStyleRepository.GetContentStylesAsync(site, channel)); var sheet = ExcelUtils.GetDataTable(filePath); if (sheet != null) { var columns = new List <string>(); for (var i = 1; i < sheet.Rows.Count; i++) //行 { var row = sheet.Rows[i]; if (i == 1) { for (var j = 0; j < sheet.Columns.Count; j++) { var value = row[j].ToString().Trim(); columns.Add(value); } continue; } var dict = new Dictionary <string, object>(); for (var j = 0; j < columns.Count; j++) { var columnName = columns[j]; var value = row[j].ToString().Trim(); var style = styles.FirstOrDefault(x => StringUtils.EqualsIgnoreCase(x.AttributeName, columnName) || StringUtils.EqualsIgnoreCase(x.DisplayName, columnName)); var attributeName = style != null ? style.AttributeName : columnName; if (!string.IsNullOrEmpty(attributeName)) { dict[attributeName] = value; } } var content = new Content(); content.LoadDict(dict); if (!string.IsNullOrEmpty(content.Title)) { content.SiteId = site.Id; content.ChannelId = channel.Id; contents.Add(content); } } } return(contents); }
public async Task CreateExcelFileForContentsAsync(string filePath, Site site, Channel channel, IEnumerable <int> contentIdList, List <string> displayAttributes, bool isPeriods, string startDate, string endDate, bool?checkedState) { DirectoryUtils.CreateDirectoryIfNotExists(DirectoryUtils.GetDirectoryPath(filePath)); FileUtils.DeleteFileIfExists(filePath); var head = new List <string>(); var rows = new List <List <string> >(); var styles = ColumnsManager.GetContentListStyles(await _databaseManager.TableStyleRepository.GetContentStylesAsync(site, channel)); foreach (var style in styles) { if (displayAttributes.Contains(style.AttributeName)) { head.Add(style.DisplayName); } } if (contentIdList == null) { contentIdList = await _databaseManager.ContentRepository.GetContentIdsAsync(site, channel, isPeriods, startDate, endDate, checkedState); } foreach (var contentId in contentIdList) { var contentInfo = await _databaseManager.ContentRepository.GetAsync(site, channel, contentId); if (contentInfo != null) { var row = new List <string>(); foreach (var style in styles) { if (displayAttributes.Contains(style.AttributeName)) { var value = contentInfo.Get <string>(style.AttributeName); row.Add(StringUtils.StripTags(value)); } } rows.Add(row); } } CsvUtils.Export(filePath, head, rows); }